--- /srv/reproducible-results/rbuild-debian/r-b-build.TyImNCVD/b1/dune-localfunctions_2.10.0-1_armhf.changes +++ /srv/reproducible-results/rbuild-debian/r-b-build.TyImNCVD/b2/dune-localfunctions_2.10.0-1_armhf.changes ├── Files │ @@ -1,3 +1,3 @@ │ │ 3c04684f5a91f5b8d6be82db5b32eafc 127240 libdevel optional libdune-localfunctions-dev_2.10.0-1_armhf.deb │ - 7f75fb02b7dd1addc092b7ead7b06df7 4972776 doc optional libdune-localfunctions-doc_2.10.0-1_all.deb │ + 9bf85b30a8187d87eb34dfcfb7ce9fe6 4969676 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 34064 2024-11-14 20:15:37.000000 control.tar.xz │ │ --rw-r--r-- 0 0 0 4938520 2024-11-14 20:15:37.000000 data.tar.xz │ │ +-rw-r--r-- 0 0 0 34032 2024-11-14 20:15:37.000000 control.tar.xz │ │ +-rw-r--r-- 0 0 0 4935452 2024-11-14 20:15:37.000000 data.tar.xz │ ├── control.tar.xz │ │ ├── control.tar │ │ │ ├── ./md5sums │ │ │ │ ├── ./md5sums │ │ │ │ │┄ Files differ │ │ │ │ ├── line order │ │ │ │ │ @@ -1,46 +1,48 @@ │ │ │ │ │ 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/a00008.html │ │ │ │ │ +usr/share/doc/libdune-localfunctions-doc/doxygen/a00008_source.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/a00014.html │ │ │ │ │ usr/share/doc/libdune-localfunctions-doc/doxygen/a00014_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/a00020.html │ │ │ │ │ usr/share/doc/libdune-localfunctions-doc/doxygen/a00020_source.html │ │ │ │ │ usr/share/doc/libdune-localfunctions-doc/doxygen/a00023.html │ │ │ │ │ usr/share/doc/libdune-localfunctions-doc/doxygen/a00023_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 │ │ │ │ │ usr/share/doc/libdune-localfunctions-doc/doxygen/a00041_source.html │ │ │ │ │ usr/share/doc/libdune-localfunctions-doc/doxygen/a00044.html │ │ │ │ │ usr/share/doc/libdune-localfunctions-doc/doxygen/a00044_source.html │ │ │ │ │ usr/share/doc/libdune-localfunctions-doc/doxygen/a00047.html │ │ │ │ │ usr/share/doc/libdune-localfunctions-doc/doxygen/a00047_source.html │ │ │ │ │ usr/share/doc/libdune-localfunctions-doc/doxygen/a00050.html │ │ │ │ │ usr/share/doc/libdune-localfunctions-doc/doxygen/a00050_source.html │ │ │ │ │ usr/share/doc/libdune-localfunctions-doc/doxygen/a00053.html │ │ │ │ │ usr/share/doc/libdune-localfunctions-doc/doxygen/a00053_source.html │ │ │ │ │ usr/share/doc/libdune-localfunctions-doc/doxygen/a00056.html │ │ │ │ │ usr/share/doc/libdune-localfunctions-doc/doxygen/a00056_source.html │ │ │ │ │ usr/share/doc/libdune-localfunctions-doc/doxygen/a00059.html │ │ │ │ │ usr/share/doc/libdune-localfunctions-doc/doxygen/a00059_source.html │ │ │ │ │ +usr/share/doc/libdune-localfunctions-doc/doxygen/a00062.html │ │ │ │ │ +usr/share/doc/libdune-localfunctions-doc/doxygen/a00062_source.html │ │ │ │ │ +usr/share/doc/libdune-localfunctions-doc/doxygen/a00065.html │ │ │ │ │ +usr/share/doc/libdune-localfunctions-doc/doxygen/a00065_source.html │ │ │ │ │ +usr/share/doc/libdune-localfunctions-doc/doxygen/a00068.html │ │ │ │ │ +usr/share/doc/libdune-localfunctions-doc/doxygen/a00068_source.html │ │ │ │ │ usr/share/doc/libdune-localfunctions-doc/doxygen/a00071.html │ │ │ │ │ usr/share/doc/libdune-localfunctions-doc/doxygen/a00071_source.html │ │ │ │ │ usr/share/doc/libdune-localfunctions-doc/doxygen/a00074.html │ │ │ │ │ usr/share/doc/libdune-localfunctions-doc/doxygen/a00074_source.html │ │ │ │ │ usr/share/doc/libdune-localfunctions-doc/doxygen/a00077.html │ │ │ │ │ usr/share/doc/libdune-localfunctions-doc/doxygen/a00077_source.html │ │ │ │ │ usr/share/doc/libdune-localfunctions-doc/doxygen/a00080.html │ │ │ │ │ @@ -53,14 +55,20 @@ │ │ │ │ │ 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 │ │ │ │ │ usr/share/doc/libdune-localfunctions-doc/doxygen/a00113_source.html │ │ │ │ │ usr/share/doc/libdune-localfunctions-doc/doxygen/a00116.html │ │ │ │ │ usr/share/doc/libdune-localfunctions-doc/doxygen/a00116_source.html │ │ │ │ │ usr/share/doc/libdune-localfunctions-doc/doxygen/a00119.html │ │ │ │ │ @@ -85,20 +93,16 @@ │ │ │ │ │ usr/share/doc/libdune-localfunctions-doc/doxygen/a00146_source.html │ │ │ │ │ usr/share/doc/libdune-localfunctions-doc/doxygen/a00149.html │ │ │ │ │ usr/share/doc/libdune-localfunctions-doc/doxygen/a00149_source.html │ │ │ │ │ usr/share/doc/libdune-localfunctions-doc/doxygen/a00152.html │ │ │ │ │ usr/share/doc/libdune-localfunctions-doc/doxygen/a00152_source.html │ │ │ │ │ usr/share/doc/libdune-localfunctions-doc/doxygen/a00155.html │ │ │ │ │ usr/share/doc/libdune-localfunctions-doc/doxygen/a00155_source.html │ │ │ │ │ -usr/share/doc/libdune-localfunctions-doc/doxygen/a00158.html │ │ │ │ │ -usr/share/doc/libdune-localfunctions-doc/doxygen/a00158_source.html │ │ │ │ │ usr/share/doc/libdune-localfunctions-doc/doxygen/a00161.html │ │ │ │ │ usr/share/doc/libdune-localfunctions-doc/doxygen/a00161_source.html │ │ │ │ │ -usr/share/doc/libdune-localfunctions-doc/doxygen/a00164.html │ │ │ │ │ -usr/share/doc/libdune-localfunctions-doc/doxygen/a00164_source.html │ │ │ │ │ usr/share/doc/libdune-localfunctions-doc/doxygen/a00167.html │ │ │ │ │ usr/share/doc/libdune-localfunctions-doc/doxygen/a00167_source.html │ │ │ │ │ usr/share/doc/libdune-localfunctions-doc/doxygen/a00170.html │ │ │ │ │ usr/share/doc/libdune-localfunctions-doc/doxygen/a00170_source.html │ │ │ │ │ usr/share/doc/libdune-localfunctions-doc/doxygen/a00173.html │ │ │ │ │ usr/share/doc/libdune-localfunctions-doc/doxygen/a00173_source.html │ │ │ │ │ usr/share/doc/libdune-localfunctions-doc/doxygen/a00176.html │ │ │ │ │ @@ -237,16 +241,14 @@ │ │ │ │ │ usr/share/doc/libdune-localfunctions-doc/doxygen/a00374_source.html │ │ │ │ │ usr/share/doc/libdune-localfunctions-doc/doxygen/a00377.html │ │ │ │ │ usr/share/doc/libdune-localfunctions-doc/doxygen/a00377_source.html │ │ │ │ │ usr/share/doc/libdune-localfunctions-doc/doxygen/a00380.html │ │ │ │ │ usr/share/doc/libdune-localfunctions-doc/doxygen/a00380_source.html │ │ │ │ │ usr/share/doc/libdune-localfunctions-doc/doxygen/a00383.html │ │ │ │ │ usr/share/doc/libdune-localfunctions-doc/doxygen/a00383_source.html │ │ │ │ │ -usr/share/doc/libdune-localfunctions-doc/doxygen/a00386.html │ │ │ │ │ -usr/share/doc/libdune-localfunctions-doc/doxygen/a00386_source.html │ │ │ │ │ usr/share/doc/libdune-localfunctions-doc/doxygen/a00389.html │ │ │ │ │ usr/share/doc/libdune-localfunctions-doc/doxygen/a00389_source.html │ │ │ │ │ usr/share/doc/libdune-localfunctions-doc/doxygen/a00392.html │ │ │ │ │ usr/share/doc/libdune-localfunctions-doc/doxygen/a00392_source.html │ │ │ │ │ usr/share/doc/libdune-localfunctions-doc/doxygen/a00395.html │ │ │ │ │ usr/share/doc/libdune-localfunctions-doc/doxygen/a00395_source.html │ │ │ │ │ usr/share/doc/libdune-localfunctions-doc/doxygen/a00398.html │ │ │ │ │ @@ -255,16 +257,14 @@ │ │ │ │ │ usr/share/doc/libdune-localfunctions-doc/doxygen/a00401_source.html │ │ │ │ │ usr/share/doc/libdune-localfunctions-doc/doxygen/a00404.html │ │ │ │ │ usr/share/doc/libdune-localfunctions-doc/doxygen/a00404_source.html │ │ │ │ │ usr/share/doc/libdune-localfunctions-doc/doxygen/a00407.html │ │ │ │ │ usr/share/doc/libdune-localfunctions-doc/doxygen/a00407_source.html │ │ │ │ │ usr/share/doc/libdune-localfunctions-doc/doxygen/a00410.html │ │ │ │ │ usr/share/doc/libdune-localfunctions-doc/doxygen/a00410_source.html │ │ │ │ │ -usr/share/doc/libdune-localfunctions-doc/doxygen/a00413.html │ │ │ │ │ -usr/share/doc/libdune-localfunctions-doc/doxygen/a00413_source.html │ │ │ │ │ usr/share/doc/libdune-localfunctions-doc/doxygen/a00416.html │ │ │ │ │ usr/share/doc/libdune-localfunctions-doc/doxygen/a00416_source.html │ │ │ │ │ usr/share/doc/libdune-localfunctions-doc/doxygen/a00419.html │ │ │ │ │ usr/share/doc/libdune-localfunctions-doc/doxygen/a00419_source.html │ │ │ │ │ usr/share/doc/libdune-localfunctions-doc/doxygen/a00422.html │ │ │ │ │ usr/share/doc/libdune-localfunctions-doc/doxygen/a00422_source.html │ │ │ │ │ usr/share/doc/libdune-localfunctions-doc/doxygen/a00425.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) 3685 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00011.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 6374 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) 3743 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00014.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 6042 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00014_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/a00017.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 41301 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) 4781 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00020.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 15327 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00020_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/a00023.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 18490 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00023_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/a00026.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 60061 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) 5254 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00029.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 21365 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) 5194 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00032.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 20870 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) 5334 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00035.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 7305 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) 6850 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00038.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 54922 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) 5180 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00041.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 21610 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) 6989 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00044.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 151739 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) 5146 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00047.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 9133 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) 5614 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00050.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 67252 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) 5507 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00053.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 75861 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) 5463 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00056.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 62830 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) 6300 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00059.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 27026 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) 4897 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00071.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 16231 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) 5197 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00074.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 29357 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) 5107 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00077.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 12403 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) 5006 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00080.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 22751 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) 4737 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00083.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 13102 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) 5078 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00086.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 12418 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) 5148 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00089.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 25783 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) 5296 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00092.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 20460 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) 5717 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00095.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 41173 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) 5411 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00098.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 21373 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) 5161 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00110.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 9897 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) 5107 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00113.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 13659 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) 5078 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00116.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 15533 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) 5032 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00119.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 29436 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) 5033 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00122.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 27564 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) 3900 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00125.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 4722 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) 5187 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00128.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 12768 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) 5512 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00131.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 109519 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) 5062 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00134.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 33499 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) 4902 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00137.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 11585 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) 4871 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00140.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 18990 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) 4780 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00143.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 11292 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) 7158 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00146.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 25188 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) 6142 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00149.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 26360 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) 6142 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00152.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 26360 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) 5258 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00155.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 20256 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) 5585 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00158.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 132014 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) 5498 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00161.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 118523 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) 6522 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00164.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 47195 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) 7361 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00167.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 42593 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) 5060 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00170.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 9360 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) 4984 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00173.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 14586 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) 5500 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00176.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 100782 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) 5173 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00179.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 12445 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) 4995 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00182.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 24188 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) 6238 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00185.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 23786 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) 5365 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00188.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 13305 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) 5231 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00191.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 23866 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) 6487 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00194.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 42105 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) 21882 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) 7052 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00200.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 102022 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) 5623 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00203.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 53709 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) 5188 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00206.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 11955 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) 5109 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00209.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 13540 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) 5222 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00212.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 111999 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) 5051 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00215.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 26143 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) 5355 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00218.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 21676 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) 5379 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00221.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 21826 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) 4886 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00224.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 14326 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) 4918 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00227.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 23898 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) 4952 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00230.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 12196 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) 5197 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00233.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 20758 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) 9090 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00236.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 35933 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) 5213 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00008.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 10364 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00008_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/a00011.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 29091 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) 5111 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00014.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 13285 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00014_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/a00017.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 21390 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) 5363 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00020.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 21377 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00020_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/a00023.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 45373 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00023_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/a00026.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 119956 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) 7277 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00029.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 45329 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) 6300 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00041.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 27026 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) 5006 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00044.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 22751 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) 5717 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00047.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 41173 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) 5078 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00050.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 12418 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) 5148 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00053.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 25783 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) 4737 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00056.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 13102 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) 5296 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00059.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 20460 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) 5107 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00062.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 12403 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) 5197 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00065.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 29357 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) 4897 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00068.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 16231 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) 5481 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00071.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 22234 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) 5458 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00074.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 22109 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) 6372 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00077.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 19543 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) 5294 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00080.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 48545 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) 5081 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00083.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 23273 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) 5148 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00086.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 13612 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) 5141 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00089.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 12551 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) 5087 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00092.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 20497 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) 5295 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00095.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 36397 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) 5302 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00098.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 33233 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) 5148 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00101.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 12592 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) 5706 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00107.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 15526 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) 5454 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00110.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 22137 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) 5480 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00113.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 22346 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) 5084 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00116.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 19688 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) 5136 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00119.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 12768 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) 5292 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00122.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 49679 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) 5459 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00125.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 22083 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) 5141 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00128.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 13124 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) 5074 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00131.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 22714 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) 5282 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00134.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 48605 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) 4832 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00137.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 20471 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) 5510 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00140.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 24381 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) 5558 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00143.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 61780 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) 7328 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00146.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 76678 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) 4719 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00149.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 8885 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) 7345 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00152.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 50280 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) 7726 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00155.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 53426 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) 5634 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00161.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 40030 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) 7816 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00167.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 43349 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) 5272 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00170.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 41301 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) 4781 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00173.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 15327 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) 5254 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00176.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 21365 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) 5334 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00179.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 7305 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) 5194 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00182.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 20870 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) 5180 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00185.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 21610 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) 6850 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00188.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 54922 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) 6688 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00191.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 60061 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) 4782 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00194.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 18490 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) 5161 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00197.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 9897 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) 5078 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00200.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 15533 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) 5032 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00203.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 29436 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) 5033 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00206.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 27564 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) 3900 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00209.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 4722 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) 5107 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00212.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 13659 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) 6400 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00215.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 15839 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) 4172 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00218.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 5444 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) 5396 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00221.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 21980 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) 5388 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00224.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 21877 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) 5461 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00227.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 12096 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) 5355 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00230.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 21676 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) 5051 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00233.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 26143 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) 5222 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00236.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 111999 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) 5713 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00248.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 44949 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) 5713 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00251.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 39719 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) 5399 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00254.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 21861 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) 5460 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00257.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 21371 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) 5157 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00260.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 34488 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) 5039 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00263.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 18773 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) 5101 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00266.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 13008 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) 5056 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00269.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 24822 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) 5222 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00272.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 92560 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) 13455 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) 5179 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00278.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 51961 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) 5051 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00281.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 20659 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) 5109 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00284.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 13186 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) 5396 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00287.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 21980 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) 4952 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00290.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 12298 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) 4918 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00293.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 24988 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) 4886 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00296.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 14900 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) 5388 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00299.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 21877 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) 5387 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00302.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 21870 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) 5767 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00305.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 19908 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) 5192 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00308.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 20750 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) 5388 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00311.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 21877 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) 4974 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00314.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 14762 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) 5166 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00317.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 24421 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) 5097 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00320.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 12245 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) 5055 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00323.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 18626 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) 5109 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00326.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 13242 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) 5178 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00329.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 31461 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) 5461 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00332.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 21397 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) 4987 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00335.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 14834 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) 5107 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00338.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 12283 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) 5176 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00341.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 24626 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) 5461 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00344.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 12096 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) 6112 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00347.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 24672 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) 5052 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00350.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 10750 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) 5459 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00353.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 22083 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) 5458 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00356.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 22109 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) 5141 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00359.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 13124 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) 5282 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00362.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 48605 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) 5074 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00365.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 22714 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) 5454 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00368.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 22137 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) 5292 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00371.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 49679 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) 5084 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00374.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 19688 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) 5136 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00377.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 12768 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) 5302 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00380.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 33233 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) 5094 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00383.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 19557 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) 5148 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00386.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 12592 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) 5480 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00389.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 22346 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) 5706 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00392.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 15526 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) 6372 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00395.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 19543 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) 5481 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00398.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 22234 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) 5081 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00401.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 23273 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) 5148 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00404.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 13612 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) 5294 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00407.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 48545 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) 5141 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00410.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 12551 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) 5087 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00413.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 20497 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) 5295 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00416.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 36397 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) 4884 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00419.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 17950 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) 6789 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00422.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 51443 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) 4172 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00428.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 5444 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) 5359 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00431.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 36065 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) 4741 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00434.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 19582 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) 5604 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00437.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 35784 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) 21997 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00440.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 60166 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) 5591 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00443.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 57996 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) 8588 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00446.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 189046 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) 6433 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00449.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 53843 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) 5443 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00452.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 20134 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) 22245 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00455.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 279939 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) 12583 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00458.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 103633 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) 6400 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00461.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 52932 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) 5537 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00464.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 36523 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) 5879 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00467.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 17595 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) 6315 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00470.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 96771 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) 6002 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00473.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 47050 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) 5535 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00476.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 30826 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) 3552 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00479.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 5413 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) 15839 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) 5213 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00485.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 10364 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) 6024 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00488.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 37596 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) 3690 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00491.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 5774 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) 5558 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00494.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 61780 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) 5510 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00497.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 24381 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) 7816 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00500.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 43349 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) 7345 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00503.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 50280 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) 4832 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00506.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 20471 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) 7726 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00509.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 53426 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) 5634 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00512.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 40030 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) 7328 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00515.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 76678 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) 5772 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00521.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 29862 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) 4035 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00524.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 5071 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) 5836 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00527.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 29091 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) 5309 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00530.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 21390 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) 5111 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00533.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 13285 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) 5363 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00536.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 21377 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) 6739 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00539.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 119956 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) 6921 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00542.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 45373 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) 7277 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00545.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 45329 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) 5420 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00548.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 18628 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) 13540 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) 5388 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00242.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 21877 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) 5109 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00245.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 13454 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) 5052 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00248.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 23946 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) 5175 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00251.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 90389 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) 5387 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00254.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 21870 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) 5713 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00257.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 39719 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) 5101 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00260.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 13008 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) 5157 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00263.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 34488 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) 5039 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00266.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 18773 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) 5097 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00269.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 12245 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) 5166 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00272.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 24421 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) 4974 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00275.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 14762 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) 4886 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00278.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 14326 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) 4952 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00281.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 12196 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) 4918 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00284.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 23898 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) 5461 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00287.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 21397 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) 5192 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00290.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 20750 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) 9090 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00293.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 35933 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) 5109 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00296.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 13186 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) 5179 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00299.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 51961 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) 5051 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00302.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 20659 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) 5197 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00305.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 20758 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) 5388 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00308.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 21882 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) 5178 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00311.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 31461 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) 5055 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00314.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 18626 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) 5109 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00317.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 13242 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) 5176 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00320.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 24626 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) 5107 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00323.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 12283 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) 4987 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00326.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 14834 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) 4918 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00329.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 24988 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) 4886 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00332.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 14900 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) 4952 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00335.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 12298 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) 5460 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00338.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 21371 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) 5713 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00341.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 44949 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) 7052 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00344.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 102022 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) 5188 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00347.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 11955 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) 5623 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00350.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 53709 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) 5399 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00353.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 21861 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) 5767 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00356.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 19908 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) 5379 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00359.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 21826 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) 5056 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00362.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 24822 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) 5109 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00365.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 13455 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) 5222 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00368.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 92560 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) 6024 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00371.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 37596 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) 4035 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00374.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 5071 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) 3690 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00377.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 5774 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) 6487 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00380.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 42105 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) 5231 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00383.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 23866 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) 5420 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00389.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 18628 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) 5052 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00392.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 10750 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) 6112 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00395.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 24672 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) 5187 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00398.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 12768 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) 22245 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00401.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 279939 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) 5591 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00404.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 57996 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) 8588 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00407.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 189046 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) 21997 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00410.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 60166 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) 6400 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00416.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 52932 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) 5879 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00419.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 17595 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) 6315 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00422.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 96771 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) 12583 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00425.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 103633 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) 6002 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00428.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 47050 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) 5443 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00431.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 20134 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) 5535 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00434.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 30826 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) 6433 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00437.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 53843 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) 5604 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00440.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 35784 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) 5537 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00443.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 36523 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) 5359 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00446.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 36065 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) 4884 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00449.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 17950 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) 4789 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00452.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 12151 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) 6789 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00455.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 51443 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) 5411 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00458.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 21373 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) 3552 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00461.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 5413 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) 4741 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00464.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 19582 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) 3685 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00467.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 6374 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) 5772 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00470.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 29862 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) 5060 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00473.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 9360 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) 5500 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00476.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 100782 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) 5365 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00479.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 13305 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) 6522 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00482.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 47195 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) 6142 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00485.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 26360 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) 5512 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00488.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 109519 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) 4902 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00491.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 11585 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) 4871 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00494.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 18990 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) 4780 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00497.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 11292 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) 7158 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00500.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 25188 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) 6238 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00503.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 23786 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) 6142 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00506.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 26360 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) 7361 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00509.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 42593 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) 5062 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00512.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 33499 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) 4984 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00515.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 14586 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) 5498 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00518.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 118523 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) 5585 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00521.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 132014 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) 5173 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00524.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 12445 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) 5258 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00527.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 20256 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) 4995 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00530.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 24188 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) 5463 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00533.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 62830 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) 5507 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00536.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 75861 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) 5146 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00539.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 9133 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) 5614 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00542.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 67252 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) 6989 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00545.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 151739 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) 3743 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00548.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 6042 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,24 +1276,24 @@ │ │ │ │ -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) 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) 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) 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) 5546 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a04562.html │ │ │ │ @@ -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) 4711 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) 4311 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) 88377 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) 88375 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: nedelec.hh File Reference │ │ │ │ +dune-localfunctions: refinedp0localinterpolation.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -65,25 +65,44 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
nedelec.hh File Reference
│ │ │ │ +
│ │ │ │ +Classes | │ │ │ │ +Namespaces
│ │ │ │ +
refinedp0localinterpolation.hh File Reference
│ │ │ │
│ │ │ │
│ │ │ │ -
#include <dune/localfunctions/nedelec/nedelec1stkindsimplex.hh>
│ │ │ │ -#include <dune/localfunctions/nedelec/nedelec1stkindcube.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 > >
 
│ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ +

│ │ │ │ +Namespaces

namespace  Dune
 
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,12 +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 │ │ │ │ │ -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_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 │ │ │ │ │ +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_:_:_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/a00011_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: nedelec.hh Source File │ │ │ │ +dune-localfunctions: refinedp0localinterpolation.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -70,38 +70,197 @@ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
nedelec.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_LOCALFUNCTIONS_NEDELEC_HH
│ │ │ │ -
6#define DUNE_LOCALFUNCTIONS_NEDELEC_HH
│ │ │ │ +
5#ifndef DUNE_REFINED_P0_LOCALINTERPOLATION_HH
│ │ │ │ +
6#define DUNE_REFINED_P0_LOCALINTERPOLATION_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
│ │ │ │ - │ │ │ │ - │ │ │ │ -
14
│ │ │ │ -
15#endif // #ifndef DUNE_LOCALFUNCTIONS_NEDELEC_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;
│ │ │ │ +
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
│ │ │ │ + │ │ │ │ +
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
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,28 +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 │ │ │ │ │ -nedelec.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_LOCALFUNCTIONS_NEDELEC_HH │ │ │ │ │ -6#define DUNE_LOCALFUNCTIONS_NEDELEC_HH │ │ │ │ │ +5#ifndef DUNE_REFINED_P0_LOCALINTERPOLATION_HH │ │ │ │ │ +6#define DUNE_REFINED_P0_LOCALINTERPOLATION_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> │ │ │ │ │ -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 │ │ │ │ │ +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 │ │ │ │ │ +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 > │ │ │ │ │ +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 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 │ │ │ │ │ +_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 │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00014.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: brezzidouglasmarini.hh File Reference │ │ │ │ +dune-localfunctions: refinedp0localcoefficients.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -65,25 +65,42 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
brezzidouglasmarini.hh File Reference
│ │ │ │ +
│ │ │ │ +Classes | │ │ │ │ +Namespaces
│ │ │ │ +
refinedp0localcoefficients.hh File Reference
│ │ │ │
│ │ │ │
│ │ │ │ -
#include <dune/localfunctions/brezzidouglasmarini/brezzidouglasmarinicube.hh>
│ │ │ │ -#include <dune/localfunctions/brezzidouglasmarini/brezzidouglasmarinisimplex.hh>
│ │ │ │ +
#include <cstddef>
│ │ │ │ +#include <iostream>
│ │ │ │ +#include <vector>
│ │ │ │ +#include <dune/localfunctions/common/localkey.hh>
│ │ │ │
│ │ │ │

Go to the source code of this file.

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

│ │ │ │ +Classes

class  Dune::RefinedP0LocalCoefficients< k >
 Layout map for RefinedP0 elements. More...
 
│ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ +

│ │ │ │ +Namespaces

namespace  Dune
 
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,13 +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 │ │ │ │ │ -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_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 │ │ │ │ │ +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_:_:_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/a00014_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: brezzidouglasmarini.hh Source File │ │ │ │ +dune-localfunctions: refinedp0localcoefficients.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -70,35 +70,85 @@ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
brezzidouglasmarini.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_LOCALFUNCTIONS_BREZZIDOUGLASMARINI_HH
│ │ │ │ -
6#define DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI_HH
│ │ │ │ +
5#ifndef DUNE_REFINED_P0_LOCALCOEFFICIENTS_HH
│ │ │ │ +
6#define DUNE_REFINED_P0_LOCALCOEFFICIENTS_HH
│ │ │ │
7
│ │ │ │ -
8// BDM implementations with compile-time order
│ │ │ │ - │ │ │ │ - │ │ │ │ +
8#include <cstddef>
│ │ │ │ +
9#include <iostream>
│ │ │ │ +
10#include <vector>
│ │ │ │
11
│ │ │ │ -
12#endif // #ifndef DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI_HH
│ │ │ │ - │ │ │ │ - │ │ │ │ + │ │ │ │ +
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
│ │ │ │ +
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,26 +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 │ │ │ │ │ -brezzidouglasmarini.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_LOCALFUNCTIONS_BREZZIDOUGLASMARINI_HH │ │ │ │ │ -6#define DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI_HH │ │ │ │ │ +5#ifndef DUNE_REFINED_P0_LOCALCOEFFICIENTS_HH │ │ │ │ │ +6#define DUNE_REFINED_P0_LOCALCOEFFICIENTS_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#include │ │ │ │ │ +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_s_i_m_p_l_e_x_._h_h │ │ │ │ │ -_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 │ │ │ │ │ +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_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/a00017.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: hierarchicalprismp2localbasis.hh File Reference │ │ │ │ +dune-localfunctions: refinedp0localbasis.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -65,46 +65,43 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ Classes | │ │ │ │ Namespaces
│ │ │ │ -
hierarchicalprismp2localbasis.hh File Reference
│ │ │ │ +
refinedp0localbasis.hh File Reference
│ │ │ │
│ │ │ │
│ │ │ │ - │ │ │ │ -

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>
│ │ │ │ +#include <dune/localfunctions/common/localbasis.hh>
│ │ │ │ +#include <dune/localfunctions/refined/common/refinedsimplexlocalbasis.hh>
│ │ │ │
│ │ │ │

Go to the source code of this file.

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

│ │ │ │ Classes

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

│ │ │ │ Namespaces

namespace  Dune
 
│ │ │ │ -

Detailed Description

│ │ │ │ -

Hierarchical prism p2 shape functions for the simplex.

│ │ │ │ -
│ │ │ │ + │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,26 +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 │ │ │ │ │ - * _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 │ │ │ │ │ + * _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 │ │ │ │ │ -hierarchicalprismp2localbasis.hh File Reference │ │ │ │ │ -Hierarchical prism p2 shape functions for the simplex. _M_o_r_e_._._. │ │ │ │ │ +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_r_i_s_m_P_2_L_o_c_a_l_B_a_s_i_s_<_ _D_,_ _R_ _> │ │ │ │ │ +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 │ │ │ │ │   │ │ │ │ │ -********** 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/a00017_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: hierarchicalprismp2localbasis.hh Source File │ │ │ │ +dune-localfunctions: refinedp0localbasis.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -70,271 +70,119 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
hierarchicalprismp2localbasis.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_PRISM_P2_LOCALBASIS_HH
│ │ │ │ -
6#define DUNE_HIERARCHICAL_PRISM_P2_LOCALBASIS_HH
│ │ │ │ +
5#ifndef DUNE_REFINED_P0_LOCALBASIS_HH
│ │ │ │ +
6#define DUNE_REFINED_P0_LOCALBASIS_HH
│ │ │ │
7
│ │ │ │ -
12#include <numeric>
│ │ │ │ -
13
│ │ │ │ -
14#include <dune/common/fvector.hh>
│ │ │ │ -
15#include <dune/common/fmatrix.hh>
│ │ │ │ -
16
│ │ │ │ - │ │ │ │ +
8#include <numeric>
│ │ │ │ +
9
│ │ │ │ +
10#include <dune/common/fvector.hh>
│ │ │ │ +
11#include <dune/common/fmatrix.hh>
│ │ │ │ +
12
│ │ │ │ + │ │ │ │ + │ │ │ │ +
15
│ │ │ │ +
16namespace Dune
│ │ │ │ +
17{
│ │ │ │
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]);
│ │ │ │ +
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
│ │ │ │ -
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 }
│ │ │ │ +
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
│ │ │ │ +
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 }
│ │ │ │
│ │ │ │ -
235
│ │ │ │ -
236 };
│ │ │ │ +
96
│ │ │ │ +
97 };
│ │ │ │
│ │ │ │ -
237}
│ │ │ │ -
238#endif
│ │ │ │ +
98
│ │ │ │ +
99}
│ │ │ │ +
100#endif
│ │ │ │ +
Contains a base class for LocalBasis classes based on uniform refinement.
│ │ │ │
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
│ │ │ │ - │ │ │ │ +
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,282 +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 │ │ │ │ │ - * _h_i_e_r_a_r_c_h_i_c_a_l_p_r_i_s_m_p_2 │ │ │ │ │ -hierarchicalprismp2localbasis.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_PRISM_P2_LOCALBASIS_HH │ │ │ │ │ -6#define DUNE_HIERARCHICAL_PRISM_P2_LOCALBASIS_HH │ │ │ │ │ +5#ifndef DUNE_REFINED_P0_LOCALBASIS_HH │ │ │ │ │ +6#define DUNE_REFINED_P0_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> │ │ │ │ │ +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 │ │ │ │ │ -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]); │ │ │ │ │ +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 │ │ │ │ │ -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]; │ │ │ │ │ +64 inline void │ │ │ │ │ +_6_5 _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 │ │ │ │ │ +66 std::vector& 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 //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 │ │ │ │ │ +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_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 │ │ │ │ │ +_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 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 │ │ │ │ │ +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 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 │ │ │ │ │ +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 │ │ │ │ │ -Evaluate Jacobian of all shape functions. │ │ │ │ │ -DDeeffiinniittiioonn hierarchicalprismp2localbasis.hh:67 │ │ │ │ │ +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/a00020.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: hierarchicalprismp2localinterpolation.hh File Reference │ │ │ │ +dune-localfunctions: refinedp1.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -65,31 +65,36 @@ │ │ │ │
│ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ Classes | │ │ │ │ Namespaces
│ │ │ │ -
hierarchicalprismp2localinterpolation.hh File Reference
│ │ │ │ +
refinedp1.hh File Reference
│ │ │ │
│ │ │ │
│ │ │ │ -
#include <vector>
│ │ │ │ +
#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::HierarchicalPrismP2LocalInterpolation< LB >
class  Dune::RefinedP1LocalFiniteElement< D, R, dim >
 Piecewise linear continuous Lagrange functions on a uniformly refined simplex element. More...
 
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ Namespaces

namespace  Dune
 
│ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,20 +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_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 │ │ │ │ │ +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_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_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 │ │ │ │ │   │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00020_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: hierarchicalprismp2localinterpolation.hh Source File │ │ │ │ +dune-localfunctions: refinedp1.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -70,104 +70,120 @@ │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
hierarchicalprismp2localinterpolation.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_PRISM_P2_LOCALINTERPOLATION_HH
│ │ │ │ -
6#define DUNE_HIERARCHICAL_PRISM_P2_LOCALINTERPOLATION_HH
│ │ │ │ +
5#ifndef DUNE_LOCALFUNCTIONS_REFINED_REFINEDP1_HH
│ │ │ │ +
6#define DUNE_LOCALFUNCTIONS_REFINED_REFINEDP1_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]);
│ │ │ │ + │ │ │ │ + │ │ │ │ +
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
│ │ │ │ -
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]);
│ │ │ │ -
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] );
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
52 {
│ │ │ │ +
53 return coefficients_;
│ │ │ │ +
54 }
│ │ │ │ +
│ │ │ │ +
55
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
59 {
│ │ │ │ +
60 return interpolation_;
│ │ │ │ +
61 }
│ │ │ │ +
│ │ │ │ +
62
│ │ │ │ +
│ │ │ │ +
64 unsigned int size () const
│ │ │ │ +
65 {
│ │ │ │ +
66 return basis_.size();
│ │ │ │ +
67 }
│ │ │ │ +
│ │ │ │
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
│ │ │ │ +
│ │ │ │ +
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
│ │ │ │ -
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
│ │ │ │ +
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,96 +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_r_i_s_m_p_2 │ │ │ │ │ -hierarchicalprismp2localinterpolation.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_PRISM_P2_LOCALINTERPOLATION_HH │ │ │ │ │ -6#define DUNE_HIERARCHICAL_PRISM_P2_LOCALINTERPOLATION_HH │ │ │ │ │ +5#ifndef DUNE_LOCALFUNCTIONS_REFINED_REFINEDP1_HH │ │ │ │ │ +6#define DUNE_LOCALFUNCTIONS_REFINED_REFINEDP1_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]); │ │ │ │ │ +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 │ │ │ │ │ -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]); │ │ │ │ │ -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] ); │ │ │ │ │ +_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 │ │ │ │ │ -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 │ │ │ │ │ +_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 │ │ │ │ │ +_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. │ │ │ │ │ +_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 │ │ │ │ │ _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_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/a00023.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: hierarchicalsimplexp2localinterpolation.hh File Reference │ │ │ │ +dune-localfunctions: refinedsimplexlocalbasis.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -65,38 +65,54 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ Classes | │ │ │ │ Namespaces
│ │ │ │ -
hierarchicalsimplexp2localinterpolation.hh File Reference
│ │ │ │ +
refinedsimplexlocalbasis.hh File Reference
│ │ │ │
│ │ │ │
│ │ │ │ -
#include <vector>
│ │ │ │ + │ │ │ │ +

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::HierarchicalSimplexP2LocalInterpolation< LB >
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
 
│ │ │ │ -
│ │ │ │ +

Detailed Description

│ │ │ │ +

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

│ │ │ │ +
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,20 +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 │ │ │ │ │ - * _h_i_e_r_a_r_c_h_i_c_a_l_p_2 │ │ │ │ │ + * _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 │ │ │ │ │ -hierarchicalsimplexp2localinterpolation.hh File Reference │ │ │ │ │ -#include │ │ │ │ │ +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_:_:_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_:_:_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 │ │ │ │ │   │ │ │ │ │ +********** 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/a00023_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: hierarchicalsimplexp2localinterpolation.hh Source File │ │ │ │ +dune-localfunctions: refinedsimplexlocalbasis.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -70,130 +70,291 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
hierarchicalsimplexp2localinterpolation.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_SIMPLEX_P2_LOCALINTERPOLATION_HH
│ │ │ │ -
6#define DUNE_HIERARCHICAL_SIMPLEX_P2_LOCALINTERPOLATION_HH
│ │ │ │ +
5#ifndef DUNE_REFINED_SIMPLEX_LOCALBASIS_HH
│ │ │ │ +
6#define DUNE_REFINED_SIMPLEX_LOCALBASIS_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]);
│ │ │ │ +
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
│ │ │ │ -
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;
│ │ │ │ -
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
│ │ │ │ +
│ │ │ │ +
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
│ │ │ │ -
Definition hierarchicalsimplexp2localinterpolation.hh:17
│ │ │ │ -
void interpolate(const F &f, std::vector< C > &out) const
Definition hierarchicalsimplexp2localinterpolation.hh:21
│ │ │ │ +
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,122 +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 │ │ │ │ │ - * _h_i_e_r_a_r_c_h_i_c_a_l_p_2 │ │ │ │ │ -hierarchicalsimplexp2localinterpolation.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_SIMPLEX_P2_LOCALINTERPOLATION_HH │ │ │ │ │ -6#define DUNE_HIERARCHICAL_SIMPLEX_P2_LOCALINTERPOLATION_HH │ │ │ │ │ +5#ifndef DUNE_REFINED_SIMPLEX_LOCALBASIS_HH │ │ │ │ │ +6#define DUNE_REFINED_SIMPLEX_LOCALBASIS_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]); │ │ │ │ │ +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 │ │ │ │ │ -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; │ │ │ │ │ -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 │ │ │ │ │ +_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_:_:_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_:_:_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/a00026.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: hierarchicalsimplexp2localbasis.hh File Reference │ │ │ │ +dune-localfunctions: refinedp1localbasis.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -65,55 +65,54 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ Classes | │ │ │ │ Namespaces
│ │ │ │ -
hierarchicalsimplexp2localbasis.hh File Reference
│ │ │ │ +
refinedp1localbasis.hh File Reference
│ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │ -

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

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

│ │ │ │
#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::HierarchicalSimplexP2LocalBasis< D, R, dim >
class  Dune::RefinedP1LocalBasis< D, R, dim >
 
class  Dune::HierarchicalSimplexP2LocalBasis< D, R, 1 >
 Hierarchical P2 basis in 1d. More...
class  Dune::RefinedP1LocalBasis< D, R, 1 >
 Uniformly refined linear Lagrange shape functions in 1D. More...
 
class  Dune::HierarchicalSimplexP2LocalBasis< D, R, 2 >
 Hierarchical P2 basis in 2d. More...
class  Dune::RefinedP1LocalBasis< D, R, 2 >
 Uniformly refined linear Lagrange shape functions on the triangle. More...
 
class  Dune::HierarchicalSimplexP2LocalBasis< D, R, 3 >
 Hierarchical P2 basis in 3d. More...
class  Dune::RefinedP1LocalBasis< D, R, 3 >
 Uniformly refined linear Lagrange shape functions on the 3D-simplex (tetrahedron). More...
 
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ Namespaces

namespace  Dune
 
│ │ │ │

Detailed Description

│ │ │ │ -

Hierarchical p2 shape functions for the simplex.

│ │ │ │ +

Linear Lagrange shape functions on a uniformly refined reference element.

│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,35 +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 │ │ │ │ │ - * _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 │ │ │ │ │ + * _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 │ │ │ │ │ -hierarchicalsimplexp2localbasis.hh File Reference │ │ │ │ │ -Hierarchical p2 shape functions for the simplex. _M_o_r_e_._._. │ │ │ │ │ +refinedp1localbasis.hh File Reference │ │ │ │ │ +Linear Lagrange shape functions on a uniformly refined reference element. │ │ │ │ │ +_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> │ │ │ │ │ +#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_S_i_m_p_l_e_x_P_2_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_,_ _d_i_m_ _> │ │ │ │ │   │ │ │ │ │ -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_._._. │ │ │ │ │ +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_:_:_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_:_:_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_:_:_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_:_:_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 ********** │ │ │ │ │ -Hierarchical p2 shape functions for the simplex. │ │ │ │ │ +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/a00026_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: hierarchicalsimplexp2localbasis.hh Source File │ │ │ │ +dune-localfunctions: refinedp1localbasis.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -70,367 +70,831 @@ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
hierarchicalsimplexp2localbasis.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_HIERARCHICAL_SIMPLEX_P2_LOCALBASIS_HH
│ │ │ │ -
6#define DUNE_HIERARCHICAL_SIMPLEX_P2_LOCALBASIS_HH
│ │ │ │ +
5#ifndef DUNE_REFINED_P1_LOCALBASIS_HH
│ │ │ │ +
6#define DUNE_REFINED_P1_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, int dim>
│ │ │ │ -
│ │ │ │ - │ │ │ │ +
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,"HierarchicalSimplexP2LocalBasis not implemented for dim > 3.");
│ │ │ │ +
27 DUNE_THROW(Dune::NotImplemented,"RefinedP1LocalBasis not implemented for dim > 3.");
│ │ │ │
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 }
│ │ │ │ -
│ │ │ │ -
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);
│ │ │ │ +
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 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 };
│ │ │ │ -
│ │ │ │ +
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
│ │ │ │ -
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 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
│ │ │ │ -
│ │ │ │ -
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 }
│ │ │ │ -
│ │ │ │ +
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
│ │ │ │ -
│ │ │ │ -
359 unsigned int order () const
│ │ │ │ -
360 {
│ │ │ │ -
361 return 2;
│ │ │ │ -
362 }
│ │ │ │ -
│ │ │ │ -
363
│ │ │ │ -
364 };
│ │ │ │ -
│ │ │ │ -
365}
│ │ │ │ -
366#endif
│ │ │ │ +
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
│ │ │ │
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
│ │ │ │ - │ │ │ │ +
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,403 +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 │ │ │ │ │ - * _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 │ │ │ │ │ + * _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_HIERARCHICAL_SIMPLEX_P2_LOCALBASIS_HH │ │ │ │ │ -6#define DUNE_HIERARCHICAL_SIMPLEX_P2_LOCALBASIS_HH │ │ │ │ │ +5#ifndef DUNE_REFINED_P1_LOCALBASIS_HH │ │ │ │ │ +6#define DUNE_REFINED_P1_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_S_i_m_p_l_e_x_P_2_L_o_c_a_l_B_a_s_i_s │ │ │ │ │ +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 _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() │ │ │ │ │ +_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,"HierarchicalSimplexP2LocalBasis not │ │ │ │ │ -implemented for dim > 3."); │ │ │ │ │ +27 DUNE_THROW(Dune::NotImplemented,"RefinedP1LocalBasis not implemented for dim │ │ │ │ │ +> 3."); │ │ │ │ │ 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 │ │ │ │ │ -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 │ │ │ │ │ +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 return 3; │ │ │ │ │ -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); │ │ │ │ │ -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); │ │ │ │ │ +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 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 }; │ │ │ │ │ +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 │ │ │ │ │ -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]; │ │ │ │ │ -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 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 │ │ │ │ │ -_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 } │ │ │ │ │ -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:: │ │ │ │ │ +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_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]; │ │ │ │ │ -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 │ │ │ │ │ +_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)); │ │ │ │ │ -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; │ │ │ │ │ +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 default: │ │ │ │ │ -350 DUNE_THROW(RangeError, "Component out of range."); │ │ │ │ │ -351 } │ │ │ │ │ -352 } else { │ │ │ │ │ -353 DUNE_THROW(NotImplemented, "Desired derivative order is not implemented"); │ │ │ │ │ -354 } │ │ │ │ │ -355 } │ │ │ │ │ +349 case 3 : │ │ │ │ │ +350 out[3] = -2; │ │ │ │ │ +351 out[4] = 2; │ │ │ │ │ +352 } │ │ │ │ │ +353 break; │ │ │ │ │ +354 │ │ │ │ │ +355 case 1: // direction == 1 │ │ │ │ │ 356 │ │ │ │ │ -_3_5_9 unsigned int _o_r_d_e_r () const │ │ │ │ │ -360 { │ │ │ │ │ -361 return 2; │ │ │ │ │ -362 } │ │ │ │ │ -363 │ │ │ │ │ -364 }; │ │ │ │ │ -365} │ │ │ │ │ -366#endif │ │ │ │ │ +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_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 │ │ │ │ │ +_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 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 │ │ │ │ │ +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 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 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 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 │ │ │ │ │ +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 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 │ │ │ │ │ +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 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 │ │ │ │ │ +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 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 │ │ │ │ │ +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 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 │ │ │ │ │ +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 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 │ │ │ │ │ +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 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 │ │ │ │ │ +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 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 │ │ │ │ │ +DDeeffiinniittiioonn refinedp1localbasis.hh:568 │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00029.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: hierarchicalp2withelementbubble.hh File Reference │ │ │ │ +dune-localfunctions: refinedp0.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -65,41 +65,58 @@ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ Classes | │ │ │ │ Namespaces
│ │ │ │ -
hierarchicalp2withelementbubble.hh File Reference
│ │ │ │ +
refinedp0.hh File Reference
│ │ │ │
│ │ │ │
│ │ │ │ + │ │ │ │ +

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

│ │ │ │
#include <dune/geometry/type.hh>
│ │ │ │ -#include <dune/localfunctions/common/localfiniteelementtraits.hh>
│ │ │ │ -#include <dune/localfunctions/hierarchical/hierarchicalp2withelementbubble/hierarchicalsimplexp2withelementbubble.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::HierarchicalP2WithElementBubbleLocalFiniteElement< D, R, dim >
 Linear Lagrange functions enriched with quadratic edge bubble functions and an element bubble function. More...
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,24 +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 │ │ │ │ │ + * _r_e_f_i_n_e_d │ │ │ │ │ _C_l_a_s_s_e_s | _N_a_m_e_s_p_a_c_e_s │ │ │ │ │ -hierarchicalp2withelementbubble.hh File Reference │ │ │ │ │ +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_/_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> │ │ │ │ │ +#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_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_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/a00029_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: hierarchicalp2withelementbubble.hh Source File │ │ │ │ +dune-localfunctions: refinedp0.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -70,112 +70,264 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
hierarchicalp2withelementbubble.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_P2_WITH_ELEMENTBUBBLE_LOCALFINITEELEMENT_HH
│ │ │ │ -
6#define DUNE_HIERARCHICAL_P2_WITH_ELEMENTBUBBLE_LOCALFINITEELEMENT_HH
│ │ │ │ +
5#ifndef DUNE_REFINED_P0_LOCALFINITEELEMENT_HH
│ │ │ │ +
6#define DUNE_REFINED_P0_LOCALFINITEELEMENT_HH
│ │ │ │
7
│ │ │ │
8#include <dune/geometry/type.hh>
│ │ │ │
9
│ │ │ │ - │ │ │ │ - │ │ │ │ + │ │ │ │ + │ │ │ │
12
│ │ │ │ -
13
│ │ │ │ -
14namespace Dune
│ │ │ │ -
15{
│ │ │ │ -
32 template<class D, class R, int dim>
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
34 {
│ │ │ │ -
35 public:
│ │ │ │ - │ │ │ │ -
38
│ │ │ │ - │ │ │ │ -
41
│ │ │ │ - │ │ │ │ -
44
│ │ │ │ - │ │ │ │ -
47
│ │ │ │ -
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 }
│ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ +
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
│ │ │ │ +
│ │ │ │ +
60 const typename Traits::LocalBasisType& localBasis () const
│ │ │ │ +
61 {
│ │ │ │ +
62 return basis_;
│ │ │ │ +
63 }
│ │ │ │ +
│ │ │ │ +
64
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
68 {
│ │ │ │ +
69 return coefficients_;
│ │ │ │ +
70 }
│ │ │ │
│ │ │ │ -
72
│ │ │ │ +
71
│ │ │ │
│ │ │ │ -
74 static constexpr GeometryType type () noexcept
│ │ │ │ -
75 {
│ │ │ │ -
76 return GeometryTypes::simplex(dim);
│ │ │ │ + │ │ │ │ +
75 {
│ │ │ │ +
76 return interpolation_;
│ │ │ │
77 }
│ │ │ │
│ │ │ │
78
│ │ │ │ -
79 private:
│ │ │ │ -
80 LocalCoefficientsType coefficients_{};
│ │ │ │ -
81 [[no_unique_address]] LocalBasisType basis_{};
│ │ │ │ -
82 [[no_unique_address]] LocalInterpolationType interpolation_{};
│ │ │ │ -
83 };
│ │ │ │ +
│ │ │ │ +
80 unsigned int size () const
│ │ │ │ +
81 {
│ │ │ │ +
82 return basis_.size();
│ │ │ │ +
83 }
│ │ │ │
│ │ │ │
84
│ │ │ │ -
85}
│ │ │ │ -
86
│ │ │ │ -
87#endif
│ │ │ │ -
Hierarchical p2 shape functions for the simplex.
│ │ │ │ - │ │ │ │ +
│ │ │ │ +
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
│ │ │ │
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
│ │ │ │ - │ │ │ │ +
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,138 +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 │ │ │ │ │ -hierarchicalp2withelementbubble.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_P2_WITH_ELEMENTBUBBLE_LOCALFINITEELEMENT_HH │ │ │ │ │ -6#define DUNE_HIERARCHICAL_P2_WITH_ELEMENTBUBBLE_LOCALFINITEELEMENT_HH │ │ │ │ │ +5#ifndef DUNE_REFINED_P0_LOCALFINITEELEMENT_HH │ │ │ │ │ +6#define DUNE_REFINED_P0_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_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> │ │ │ │ │ +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 │ │ │ │ │ -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 │ │ │ │ │ -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 │ │ │ │ │ +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 │ │ │ │ │ +_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 GeometryTypes::simplex(dim); │ │ │ │ │ +76 return interpolation_; │ │ │ │ │ 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 }; │ │ │ │ │ +_8_0 unsigned int _s_i_z_e () const │ │ │ │ │ +81 { │ │ │ │ │ +82 return basis_.size(); │ │ │ │ │ +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. │ │ │ │ │ +_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 │ │ │ │ │ +_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 │ │ │ │ │ +_r_e_f_i_n_e_d_p_0_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 │ │ │ │ │ +_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_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_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/a00041.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: hierarchicalp2.hh File Reference │ │ │ │ +dune-localfunctions: power.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -65,35 +65,43 @@ │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ Classes | │ │ │ │ Namespaces
│ │ │ │ -
hierarchicalp2.hh File Reference
│ │ │ │ +
power.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 <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::HierarchicalP2LocalFiniteElement< D, R, dim >
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...
 
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ Namespaces

namespace  Dune
 
│ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,23 +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 │ │ │ │ │ - * _h_i_e_r_a_r_c_h_i_c_a_l │ │ │ │ │ + * _m_e_t_a │ │ │ │ │ _C_l_a_s_s_e_s | _N_a_m_e_s_p_a_c_e_s │ │ │ │ │ -hierarchicalp2.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_/_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" │ │ │ │ │ +#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_:_:_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_:_:_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_._._. │ │ │ │ │   │ │ │ │ │ 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: hierarchicalp2.hh Source File │ │ │ │ +dune-localfunctions: power.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -70,124 +70,144 @@ │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
hierarchicalp2.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#ifndef DUNE_HIERARCHICAL_P2_LOCALFINITEELEMENT_HH
│ │ │ │ -
6#define DUNE_HIERARCHICAL_P2_LOCALFINITEELEMENT_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 }
│ │ │ │ +
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>
│ │ │ │ +
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
│ │ │ │ -
│ │ │ │ -
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;
│ │ │ │ +
│ │ │ │ +
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
│ │ │ │ - │ │ │ │ -
81 };
│ │ │ │ -
│ │ │ │ -
82
│ │ │ │ -
83}
│ │ │ │ -
84
│ │ │ │ -
85#endif
│ │ │ │ - │ │ │ │ -
Hierarchical p2 shape functions for the simplex.
│ │ │ │ - │ │ │ │ - │ │ │ │ +
│ │ │ │ +
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
│ │ │ │ +
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
│ │ │ │ -
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
│ │ │ │ +
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,137 +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 │ │ │ │ │ - * _h_i_e_r_a_r_c_h_i_c_a_l │ │ │ │ │ -hierarchicalp2.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#ifndef DUNE_HIERARCHICAL_P2_LOCALFINITEELEMENT_HH │ │ │ │ │ -6#define DUNE_HIERARCHICAL_P2_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_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 } │ │ │ │ │ +5 │ │ │ │ │ +6#ifndef DUNE_LOCALFUNCTIONS_META_POWER_HH │ │ │ │ │ +7#define DUNE_LOCALFUNCTIONS_META_POWER_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_/_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 │ │ │ │ │ -_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; │ │ │ │ │ +_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 │ │ │ │ │ -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_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. │ │ │ │ │ -_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 │ │ │ │ │ +_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 │ │ │ │ │ +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_:_:_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_:_:_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 │ │ │ │ │ =============================================================================== │ │ │ │ │ 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: nedelecsimplexinterpolation.hh File Reference │ │ │ │ +dune-localfunctions: dualpq1factory.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -65,50 +65,34 @@ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ Classes | │ │ │ │ Namespaces
│ │ │ │ -
nedelecsimplexinterpolation.hh File Reference
│ │ │ │ +
dualpq1factory.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 <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::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::DualPQ1LocalFiniteElementCache< D, R, dim, faceDual >
 
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ Namespaces

namespace  Dune
 
│ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,39 +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 │ │ │ │ │ - * _n_e_d_e_l_e_c │ │ │ │ │ - * _n_e_d_e_l_e_c_s_i_m_p_l_e_x │ │ │ │ │ + * _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 │ │ │ │ │ -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> │ │ │ │ │ +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_:_:_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_:_:_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/a00044_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: nedelecsimplexinterpolation.hh Source File │ │ │ │ +dune-localfunctions: dualpq1factory.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -70,817 +70,118 @@ │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
nedelecsimplexinterpolation.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_LOCALFUNCTIONS_NEDELEC_NEDELECSIMPLEX_NEDELECSIMPLEXINTERPOLATION_HH
│ │ │ │ -
6#define DUNE_LOCALFUNCTIONS_NEDELEC_NEDELECSIMPLEX_NEDELECSIMPLEXINTERPOLATION_HH
│ │ │ │ +
5#ifndef DUNE_LOCALFUNCTIONS_DUAL_P1_Q1_FACTORY_HH
│ │ │ │ +
6#define DUNE_LOCALFUNCTIONS_DUAL_P1_Q1_FACTORY_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
│ │ │ │ -
35
│ │ │ │ -
36
│ │ │ │ -
37 // LocalCoefficientsContainer
│ │ │ │ -
38 // --------------------------
│ │ │ │ -
39
│ │ │ │ -
│ │ │ │ - │ │ │ │ +
8#include <map>
│ │ │ │ +
9
│ │ │ │ + │ │ │ │ + │ │ │ │ +
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 static FE* create(const Dune::GeometryType& gt)
│ │ │ │
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 }
│ │ │ │ -
│ │ │ │ +
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 std::size_t size () const
│ │ │ │ -
58 {
│ │ │ │ -
59 return localKey_.size();
│ │ │ │ -
60 }
│ │ │ │ -
│ │ │ │ -
61
│ │ │ │ -
62 private:
│ │ │ │ -
63 std::vector< LocalKey > localKey_;
│ │ │ │ -
64 };
│ │ │ │ +
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
│ │ │ │ -
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
│ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ +
66protected:
│ │ │ │ +
67 mutable FEMap cache_;
│ │ │ │ +
68};
│ │ │ │ +
│ │ │ │ +
69
│ │ │ │ +
70} // namespace Dune
│ │ │ │ +
71
│ │ │ │ +
72#endif // DUNE_LOCALFUNCTIONS_DUAL_P1_Q1_FACTORY_HH
│ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │
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
│ │ │ │ +
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,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 │ │ │ │ │ + * _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_LOCALFUNCTIONS_NEDELEC_NEDELECSIMPLEX_NEDELECSIMPLEXINTERPOLATION_HH │ │ │ │ │ -6#define │ │ │ │ │ -DUNE_LOCALFUNCTIONS_NEDELEC_NEDELECSIMPLEX_NEDELECSIMPLEXINTERPOLATION_HH │ │ │ │ │ +5#ifndef DUNE_LOCALFUNCTIONS_DUAL_P1_Q1_FACTORY_HH │ │ │ │ │ +6#define DUNE_LOCALFUNCTIONS_DUAL_P1_Q1_FACTORY_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 │ │ │ │ │ -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 │ │ │ │ │ +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> │ │ │ │ │ +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 static _F_E* _c_r_e_a_t_e(const Dune::GeometryType& gt) │ │ │ │ │ 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 } │ │ │ │ │ +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 │ │ │ │ │ -_5_7 std::size_t _s_i_z_e () const │ │ │ │ │ -58 { │ │ │ │ │ -59 return localKey_.size(); │ │ │ │ │ -60 } │ │ │ │ │ -61 │ │ │ │ │ -62 private: │ │ │ │ │ -63 std::vector< LocalKey > localKey_; │ │ │ │ │ -64 }; │ │ │ │ │ +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 │ │ │ │ │ -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 │ │ │ │ │ -_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 │ │ │ │ │ -_l_o_c_a_l_k_e_y_._h_h │ │ │ │ │ +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_w_r_a_p_p_e_r_s_._h_h │ │ │ │ │ +_v_i_r_t_u_a_l_i_n_t_e_r_f_a_c_e_._h_h │ │ │ │ │ +_d_u_a_l_m_o_r_t_a_r_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_:_:_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 │ │ │ │ │ -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_:_:_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/a00047.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: nedelecsimplexbasis.hh File Reference │ │ │ │ +dune-localfunctions: dualq1.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -65,35 +65,42 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ Classes | │ │ │ │ Namespaces
│ │ │ │ -
nedelecsimplexbasis.hh File Reference
│ │ │ │ +
dualq1.hh File Reference
│ │ │ │
│ │ │ │
│ │ │ │ -
#include <fstream>
│ │ │ │ -#include <dune/common/exceptions.hh>
│ │ │ │ -#include <dune/localfunctions/utility/defaultbasisfactory.hh>
│ │ │ │ -#include "nedelecsimplexinterpolation.hh"
│ │ │ │ -#include "nedelecsimplexprebasis.hh"
│ │ │ │ +
#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

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

│ │ │ │ Namespaces

namespace  Dune
 
│ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,24 +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 │ │ │ │ │ - * _n_e_d_e_l_e_c │ │ │ │ │ - * _n_e_d_e_l_e_c_s_i_m_p_l_e_x │ │ │ │ │ + * _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 │ │ │ │ │ -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" │ │ │ │ │ +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" │ │ │ │ │ _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_:_:_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/a00047_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: nedelecsimplexbasis.hh Source File │ │ │ │ +dune-localfunctions: dualq1.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -70,55 +70,264 @@ │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
nedelecsimplexbasis.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_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
│ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ +
5#ifndef DUNE_DUAL_Q1_LOCALFINITEELEMENT_HH
│ │ │ │ +
6#define DUNE_DUAL_Q1_LOCALFINITEELEMENT_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>
│ │ │ │ +
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
│ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │
Definition bdfmcube.hh:18
│ │ │ │ -
Definition nedelecsimplexbasis.hh:43
│ │ │ │ -
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
│ │ │ │ +
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,49 +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 │ │ │ │ │ - * _n_e_d_e_l_e_c │ │ │ │ │ - * _n_e_d_e_l_e_c_s_i_m_p_l_e_x │ │ │ │ │ -nedelecsimplexbasis.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_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 │ │ │ │ │ -_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 │ │ │ │ │ -_n_e_d_e_l_e_c_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 │ │ │ │ │ +5#ifndef DUNE_DUAL_Q1_LOCALFINITEELEMENT_HH │ │ │ │ │ +6#define DUNE_DUAL_Q1_LOCALFINITEELEMENT_HH │ │ │ │ │ +7 │ │ │ │ │ +8#include │ │ │ │ │ +9 │ │ │ │ │ +10#include │ │ │ │ │ +11#include │ │ │ │ │ +12 │ │ │ │ │ +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 │ │ │ │ │ +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 │ │ │ │ │ =============================================================================== │ │ │ │ │ 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: nedelecsimplexprebasis.hh File Reference │ │ │ │ +dune-localfunctions: dualp1localcoefficients.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -65,38 +65,34 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ Classes | │ │ │ │ Namespaces
│ │ │ │ -
nedelecsimplexprebasis.hh File Reference
│ │ │ │ +
dualp1localcoefficients.hh File Reference
│ │ │ │
│ │ │ │
│ │ │ │ -
#include <fstream>
│ │ │ │ -#include <utility>
│ │ │ │ -#include <dune/geometry/type.hh>
│ │ │ │ -#include <dune/localfunctions/utility/polynomialbasis.hh>
│ │ │ │ +
#include <cstddef>
│ │ │ │ +#include <vector>
│ │ │ │ +#include <dune/localfunctions/common/localkey.hh>
│ │ │ │
│ │ │ │

Go to the source code of this file.

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

│ │ │ │ Classes

struct  Dune::NedelecPreBasisFactory< dim, Field >
 
struct  Dune::NedelecPreBasisFactory< dim, Field >::EvaluationBasisFactory< dd, FF >
 
struct  Dune::NedelecVecMatrix< geometryId, Field >
class  Dune::DualP1LocalCoefficients< dim >
 Local coefficients for dual simplex P1 elements. 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 │ │ │ │ │ - * _n_e_d_e_l_e_c │ │ │ │ │ - * _n_e_d_e_l_e_c_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 │ │ │ │ │ -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> │ │ │ │ │ +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> │ │ │ │ │ _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_ _> │ │ │ │ │ -  │ │ │ │ │ -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_ _> │ │ │ │ │ +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/a00050_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: nedelecsimplexprebasis.hh Source File │ │ │ │ +dune-localfunctions: dualp1localcoefficients.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -70,353 +70,78 @@ │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
nedelecsimplexprebasis.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_NEDELEC_NEDELECSIMPLEX_NEDELECSIMPLEXPREBASIS_HH
│ │ │ │ -
6#define DUNE_LOCALFUNCTIONS_NEDELEC_NEDELECSIMPLEX_NEDELECSIMPLEXPREBASIS_HH
│ │ │ │ +
5#ifndef DUNE_DUAL_P1_LOCALCOEFFICIENTS_HH
│ │ │ │ +
6#define DUNE_DUAL_P1_LOCALCOEFFICIENTS_HH
│ │ │ │
7
│ │ │ │ -
8#include <fstream>
│ │ │ │ -
9#include <utility>
│ │ │ │ +
8#include <cstddef>
│ │ │ │ +
9#include <vector>
│ │ │ │
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;
│ │ │ │ - │ │ │ │ - │ │ │ │ -
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
│ │ │ │ - │ │ │ │ +
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
│ │ │ │ -
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
│ │ │ │ +
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
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,406 +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 │ │ │ │ │ - * _n_e_d_e_l_e_c │ │ │ │ │ - * _n_e_d_e_l_e_c_s_i_m_p_l_e_x │ │ │ │ │ -nedelecsimplexprebasis.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_NEDELEC_NEDELECSIMPLEX_NEDELECSIMPLEXPREBASIS_HH │ │ │ │ │ -6#define DUNE_LOCALFUNCTIONS_NEDELEC_NEDELECSIMPLEX_NEDELECSIMPLEXPREBASIS_HH │ │ │ │ │ +5#ifndef DUNE_DUAL_P1_LOCALCOEFFICIENTS_HH │ │ │ │ │ +6#define DUNE_DUAL_P1_LOCALCOEFFICIENTS_HH │ │ │ │ │ 7 │ │ │ │ │ -8#include │ │ │ │ │ -9#include │ │ │ │ │ +8#include │ │ │ │ │ +9#include │ │ │ │ │ 10 │ │ │ │ │ -11#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 │ │ │ │ │ -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 │ │ │ │ │ +_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_:_:_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 │ │ │ │ │ +_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 │ │ │ │ │ =============================================================================== │ │ │ │ │ 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: nedelec1stkindcube.hh File Reference │ │ │ │ +dune-localfunctions: dualp1localbasis.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -65,40 +65,35 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ Classes | │ │ │ │ Namespaces
│ │ │ │ -
nedelec1stkindcube.hh File Reference
│ │ │ │ +
dualp1localbasis.hh File Reference
│ │ │ │
│ │ │ │
│ │ │ │
#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>
│ │ │ │ +#include <dune/common/fmatrix.hh>
│ │ │ │ +#include <dune/localfunctions/common/localbasis.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...
class  Dune::DualP1LocalBasis< D, R, dim, faceDualT >
 Dual Lagrange shape functions on the simplex. More...
 
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ Namespaces

namespace  Dune
 
│ │ │ │ ├── encoding │ │ │ │ │ @@ -1 +1 @@ │ │ │ │ │ -utf-8 │ │ │ │ │ +us-ascii │ │ │ │ ├── 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 │ │ │ │ │ - * _n_e_d_e_l_e_c │ │ │ │ │ + * _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 │ │ │ │ │ -nedelec1stkindcube.hh File Reference │ │ │ │ │ +dualp1localbasis.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_:_:_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_._._. │ │ │ │ │ +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/a00053_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: nedelec1stkindcube.hh Source File │ │ │ │ +dune-localfunctions: dualp1localbasis.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -70,518 +70,147 @@ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
nedelec1stkindcube.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_LOCALFUNCTIONS_NEDELEC_NEDELEC1STKINDCUBE_HH
│ │ │ │ -
6#define DUNE_LOCALFUNCTIONS_NEDELEC_NEDELEC1STKINDCUBE_HH
│ │ │ │ +
5#ifndef DUNE_DUAL_P1_LOCALBASIS_HH
│ │ │ │ +
6#define DUNE_DUAL_P1_LOCALBASIS_HH
│ │ │ │
7
│ │ │ │
8#include <numeric>
│ │ │ │
9
│ │ │ │ -
10#include <dune/common/fmatrix.hh>
│ │ │ │ -
11#include <dune/common/fvector.hh>
│ │ │ │ -
12#include <dune/common/math.hh>
│ │ │ │ +
10#include <dune/common/fvector.hh>
│ │ │ │ +
11#include <dune/common/fmatrix.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;
│ │ │ │ +
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
│ │ │ │ -
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
│ │ │ │ - │ │ │ │ - │ │ │ │ +
│ │ │ │ +
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 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
│ │ │ │ +
Type traits for LocalBasisVirtualInterface.
Definition common/localbasis.hh:35
│ │ │ │
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
│ │ │ │ - │ │ │ │ +
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,540 +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 │ │ │ │ │ - * _n_e_d_e_l_e_c │ │ │ │ │ -nedelec1stkindcube.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_LOCALFUNCTIONS_NEDELEC_NEDELEC1STKINDCUBE_HH │ │ │ │ │ -6#define DUNE_LOCALFUNCTIONS_NEDELEC_NEDELEC1STKINDCUBE_HH │ │ │ │ │ +5#ifndef DUNE_DUAL_P1_LOCALBASIS_HH │ │ │ │ │ +6#define DUNE_DUAL_P1_LOCALBASIS_HH │ │ │ │ │ 7 │ │ │ │ │ 8#include │ │ │ │ │ 9 │ │ │ │ │ -10#include │ │ │ │ │ -11#include │ │ │ │ │ -12#include │ │ │ │ │ +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 │ │ │ │ │ -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; │ │ │ │ │ +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 │ │ │ │ │ -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) │ │ │ │ │ +_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; 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 // 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_k_e_y_._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 │ │ │ │ │ +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_:_:_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_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 │ │ │ │ │ +_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 │ │ │ │ │ _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/a00056.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: nedelec1stkindsimplex.hh File Reference │ │ │ │ +dune-localfunctions: dualp1localinterpolation.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -65,39 +65,31 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ Classes | │ │ │ │ Namespaces
│ │ │ │ -
nedelec1stkindsimplex.hh File Reference
│ │ │ │ +
dualp1localinterpolation.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>
│ │ │ │ +
#include <vector>
│ │ │ │
│ │ │ │

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...
class  Dune::DualP1LocalInterpolation< dim, LB >
 
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ Namespaces

namespace  Dune
 
│ │ │ │ ├── encoding │ │ │ │ │ @@ -1 +1 @@ │ │ │ │ │ -utf-8 │ │ │ │ │ +us-ascii │ │ │ │ ├── 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 │ │ │ │ │ - * _n_e_d_e_l_e_c │ │ │ │ │ + * _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 │ │ │ │ │ -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> │ │ │ │ │ +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_:_:_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_._._. │ │ │ │ │ +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/a00056_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: nedelec1stkindsimplex.hh Source File │ │ │ │ +dune-localfunctions: dualp1localinterpolation.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -70,423 +70,85 @@ │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
nedelec1stkindsimplex.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_NEDELEC_NEDELEC1STKINDSIMPLEX_HH
│ │ │ │ -
6#define DUNE_LOCALFUNCTIONS_NEDELEC_NEDELEC1STKINDSIMPLEX_HH
│ │ │ │ +
5#ifndef DUNE_DUAL_P1_LOCALINTERPOLATION_HH
│ │ │ │ +
6#define DUNE_DUAL_P1_LOCALINTERPOLATION_HH
│ │ │ │
7
│ │ │ │ -
8#include <numeric>
│ │ │ │ +
8#include <vector>
│ │ │ │
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);
│ │ │ │ +
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 }
│ │ │ │ -
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 };
│ │ │ │ +
57
│ │ │ │ +
58 };
│ │ │ │
│ │ │ │ -
456
│ │ │ │ -
457}
│ │ │ │ -
458
│ │ │ │ -
459#endif
│ │ │ │ - │ │ │ │ - │ │ │ │ +
59}
│ │ │ │ +
60
│ │ │ │ +
61#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
│ │ │ │ - │ │ │ │ +
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,441 +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 │ │ │ │ │ - * _n_e_d_e_l_e_c │ │ │ │ │ -nedelec1stkindsimplex.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_NEDELEC_NEDELEC1STKINDSIMPLEX_HH │ │ │ │ │ -6#define DUNE_LOCALFUNCTIONS_NEDELEC_NEDELEC1STKINDSIMPLEX_HH │ │ │ │ │ +5#ifndef DUNE_DUAL_P1_LOCALINTERPOLATION_HH │ │ │ │ │ +6#define DUNE_DUAL_P1_LOCALINTERPOLATION_HH │ │ │ │ │ 7 │ │ │ │ │ -8#include │ │ │ │ │ +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); │ │ │ │ │ +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 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_k_e_y_._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 │ │ │ │ │ +58 }; │ │ │ │ │ +59} │ │ │ │ │ +60 │ │ │ │ │ +61#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_:_:_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 │ │ │ │ │ +_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/a00059.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: power.hh File Reference │ │ │ │ +dune-localfunctions: dualp1.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -65,43 +65,36 @@ │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ Classes | │ │ │ │ Namespaces
│ │ │ │ -
power.hh File Reference
│ │ │ │ +
dualp1.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>
│ │ │ │ +
#include <dune/geometry/type.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::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::DualP1LocalFiniteElement< D, R, dim, faceDual >
 The local dual p1 finite element on simplices. More...
 
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ Namespaces

namespace  Dune
 
│ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,33 +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 │ │ │ │ │ + * _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 │ │ │ │ │ -power.hh File Reference │ │ │ │ │ -#include │ │ │ │ │ -#include │ │ │ │ │ +dualp1.hh File Reference │ │ │ │ │ #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> │ │ │ │ │ +#include <_d_u_n_e_/_l_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_:_:_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_:_:_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/a00059_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: power.hh Source File │ │ │ │ +dune-localfunctions: dualp1.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -70,144 +70,118 @@ │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
power.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
│ │ │ │ -
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>
│ │ │ │ -
13
│ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ +
5#ifndef DUNE_LOCALFUNCTIONS_DUALMORTARBASIS_DUALP1_HH
│ │ │ │ +
6#define DUNE_LOCALFUNCTIONS_DUALMORTARBASIS_DUALP1_HH
│ │ │ │ +
7
│ │ │ │ +
8#include <dune/geometry/type.hh>
│ │ │ │ +
9
│ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ +
14
│ │ │ │ +
15namespace Dune
│ │ │ │ +
16{
│ │ │ │
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_;
│ │ │ │ +
33 template<class D, class R, int dim, bool faceDual=false>
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
35 {
│ │ │ │ +
36 public:
│ │ │ │ + │ │ │ │ + │ │ │ │ +
41
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
45 {}
│ │ │ │ +
│ │ │ │
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 { }
│ │ │ │ +
│ │ │ │ +
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 }
│ │ │ │
│ │ │ │ -
71
│ │ │ │
73
│ │ │ │ -
77 const typename Traits::Basis& basis() const { return basis_; }
│ │ │ │ -
79
│ │ │ │ -
│ │ │ │ -
83 const typename Traits::Coefficients& coefficients() const
│ │ │ │ -
84 { return coefficients_; }
│ │ │ │ +
│ │ │ │ +
76 static constexpr GeometryType type ()
│ │ │ │ +
77 {
│ │ │ │ +
78 return GeometryTypes::simplex(dim);
│ │ │ │ +
79 }
│ │ │ │ +
│ │ │ │ +
80
│ │ │ │ +
81 private:
│ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ +
85 };
│ │ │ │
│ │ │ │
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
│ │ │ │ -
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
│ │ │ │ +
87
│ │ │ │ +
88
│ │ │ │ +
89}
│ │ │ │ +
90
│ │ │ │ +
91#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
│ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ +
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
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,171 +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 │ │ │ │ │ - * _m_e_t_a │ │ │ │ │ -power.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 │ │ │ │ │ -6#ifndef DUNE_LOCALFUNCTIONS_META_POWER_HH │ │ │ │ │ -7#define DUNE_LOCALFUNCTIONS_META_POWER_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_/_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> │ │ │ │ │ +5#ifndef DUNE_LOCALFUNCTIONS_DUALMORTARBASIS_DUALP1_HH │ │ │ │ │ +6#define DUNE_LOCALFUNCTIONS_DUALMORTARBASIS_DUALP1_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 │ │ │ │ │ -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_; │ │ │ │ │ +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 │ │ │ │ │ -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 { } │ │ │ │ │ -71 │ │ │ │ │ +_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_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_; } │ │ │ │ │ +_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 │ │ │ │ │ -_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 │ │ │ │ │ +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_b_a_s_i_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 │ │ │ │ │ +_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_:_:_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_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 │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00071.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: dualq1localinterpolation.hh File Reference │ │ │ │ +dune-localfunctions: brezzidouglasmarini2simplex2d.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -65,34 +65,36 @@ │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ Classes | │ │ │ │ Namespaces
│ │ │ │ -
dualq1localinterpolation.hh File Reference
│ │ │ │ +
brezzidouglasmarini2simplex2d.hh File Reference
│ │ │ │
│ │ │ │
│ │ │ │ -
#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::DualQ1LocalInterpolation< dim, LB >
class  Dune::BDM2Simplex2DLocalFiniteElement< D, R >
 Second order Brezzi-Douglas-Marini shape functions on triangles. More...
 
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ 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 │ │ │ │ │ - * _d_u_a_l_m_o_r_t_a_r_b_a_s_i_s │ │ │ │ │ - * _d_u_a_l_q_1 │ │ │ │ │ + * _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 │ │ │ │ │ -dualq1localinterpolation.hh File Reference │ │ │ │ │ -#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 │ │ │ │ │ -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_:_:_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/a00071_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: dualq1localinterpolation.hh Source File │ │ │ │ +dune-localfunctions: brezzidouglasmarini2simplex2d.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -70,106 +70,123 @@ │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
dualq1localinterpolation.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#ifndef DUNE_DUAL_Q1_LOCALINTERPOLATION_HH
│ │ │ │ -
6#define DUNE_DUAL_Q1_LOCALINTERPOLATION_HH
│ │ │ │ +
5#ifndef DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI2_SIMPLEX2D_LOCALFINITEELEMENT_HH
│ │ │ │ +
6#define DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI2_SIMPLEX2D_LOCALFINITEELEMENT_HH
│ │ │ │
7
│ │ │ │ -
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;
│ │ │ │ +
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
│ │ │ │ -
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 }
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
45 basis(s),
│ │ │ │ +
46 interpolation(s)
│ │ │ │ +
47 {}
│ │ │ │ +
│ │ │ │ +
48
│ │ │ │ +
│ │ │ │ +
49 const typename Traits::LocalBasisType& localBasis () const
│ │ │ │ +
50 {
│ │ │ │ +
51 return basis;
│ │ │ │ +
52 }
│ │ │ │ +
│ │ │ │
53
│ │ │ │ -
54 out.resize(size);
│ │ │ │ -
55
│ │ │ │ -
56 // solve a linear system to compute the dual coefficients
│ │ │ │ -
57 Dune::FieldMatrix<C,size,size> mat;
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
55 {
│ │ │ │ +
56 return coefficients;
│ │ │ │ +
57 }
│ │ │ │ +
│ │ │ │
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 };
│ │ │ │ -
│ │ │ │ -
76
│ │ │ │ -
77}
│ │ │ │ -
78
│ │ │ │ -
79#endif
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
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
│ │ │ │ -
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
│ │ │ │ +
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,102 +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 │ │ │ │ │ - * _d_u_a_l_m_o_r_t_a_r_b_a_s_i_s │ │ │ │ │ - * _d_u_a_l_q_1 │ │ │ │ │ -dualq1localinterpolation.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#ifndef DUNE_DUAL_Q1_LOCALINTERPOLATION_HH │ │ │ │ │ -6#define DUNE_DUAL_Q1_LOCALINTERPOLATION_HH │ │ │ │ │ +5#ifndef │ │ │ │ │ +DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI2_SIMPLEX2D_LOCALFINITEELEMENT_HH │ │ │ │ │ +6#define │ │ │ │ │ +DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI2_SIMPLEX2D_LOCALFINITEELEMENT_HH │ │ │ │ │ 7 │ │ │ │ │ -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< │ │ │ │ │ +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 │ │ │ │ │ -39 // compute Q1 interpolation coefficients │ │ │ │ │ -40 Dune::FieldVector q1Coefficients; │ │ │ │ │ -41 │ │ │ │ │ -42 for (int i=0; i< (1< mat; │ │ │ │ │ +_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 │ │ │ │ │ -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 │ │ │ │ │ +_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_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_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_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_:_:_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_:_:_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/a00074.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: dualq1localbasis.hh File Reference │ │ │ │ +dune-localfunctions: brezzidouglasmarini1cube2d.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -65,36 +65,36 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ Classes | │ │ │ │ Namespaces
│ │ │ │ -
dualq1localbasis.hh File Reference
│ │ │ │ +
brezzidouglasmarini1cube2d.hh File Reference
│ │ │ │
│ │ │ │
│ │ │ │ -
#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::DualQ1LocalBasis< D, R, dim >
 Dual Lagrange shape functions of order 1 on the reference cube. More...
class  Dune::BDM1Cube2DLocalFiniteElement< D, R >
 First order Brezzi-Douglas-Marini shape functions on quadrilaterals. More...
 
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ Namespaces

namespace  Dune
 
│ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,25 +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_q_1 │ │ │ │ │ + * _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 │ │ │ │ │ -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> │ │ │ │ │ +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_:_:_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_:_:_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/a00074_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: dualq1localbasis.hh Source File │ │ │ │ +dune-localfunctions: brezzidouglasmarini1cube2d.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -70,171 +70,123 @@ │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
dualq1localbasis.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_DUAL_Q1_LOCALBASIS_HH
│ │ │ │ -
6#define DUNE_DUAL_Q1_LOCALBASIS_HH
│ │ │ │ +
5#ifndef DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI1_QUBE2D_LOCALFINITEELEMENT_HH
│ │ │ │ +
6#define DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI1_QUBE2D_LOCALFINITEELEMENT_HH
│ │ │ │
7
│ │ │ │ -
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;
│ │ │ │ +
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
│ │ │ │ -
│ │ │ │ -
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
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
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
│ │ │ │ -
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
│ │ │ │ +
75 private:
│ │ │ │ + │ │ │ │ +
77 BDM1Cube2DLocalCoefficients coefficients;
│ │ │ │ + │ │ │ │ +
79 };
│ │ │ │ +
│ │ │ │ +
80}
│ │ │ │ +
81#endif // DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI1_QUBE2D_LOCALFINITEELEMENT_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 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
│ │ │ │ - │ │ │ │ +
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,185 +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 │ │ │ │ │ - * _d_u_a_l_m_o_r_t_a_r_b_a_s_i_s │ │ │ │ │ - * _d_u_a_l_q_1 │ │ │ │ │ -dualq1localbasis.hh │ │ │ │ │ + * _b_r_e_z_z_i_d_o_u_g_l_a_s_m_a_r_i_n_i │ │ │ │ │ +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_DUAL_Q1_LOCALBASIS_HH │ │ │ │ │ -6#define DUNE_DUAL_Q1_LOCALBASIS_HH │ │ │ │ │ +5#ifndef DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI1_QUBE2D_LOCALFINITEELEMENT_HH │ │ │ │ │ +6#define DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI1_QUBE2D_LOCALFINITEELEMENT_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_/_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; │ │ │ │ │ +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; │ │ │ │ │ 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 } │ │ │ │ │ -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 │ │ │ │ │ +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_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 │ │ │ │ │ _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 │ │ │ │ │ +_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 │ │ │ │ │ -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 │ │ │ │ │ +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 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/a00077.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: dualq1localcoefficients.hh File Reference │ │ │ │ +dune-localfunctions: brezzidouglasmarinicube.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -65,35 +65,40 @@ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ Classes | │ │ │ │ Namespaces
│ │ │ │ -
dualq1localcoefficients.hh File Reference
│ │ │ │ +
brezzidouglasmarinicube.hh File Reference
│ │ │ │
│ │ │ │
│ │ │ │ -
#include <cstddef>
│ │ │ │ -#include <iostream>
│ │ │ │ -#include <vector>
│ │ │ │ -#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::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,24 +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 │ │ │ │ │ - * _d_u_a_l_m_o_r_t_a_r_b_a_s_i_s │ │ │ │ │ - * _d_u_a_l_q_1 │ │ │ │ │ + * _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 │ │ │ │ │ -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> │ │ │ │ │ +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_:_:_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_:_:_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/a00077_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: dualq1localcoefficients.hh Source File │ │ │ │ +dune-localfunctions: brezzidouglasmarinicube.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -70,79 +70,112 @@ │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
dualq1localcoefficients.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_DUAL_Q1_LOCALCOEFFICIENTS_HH
│ │ │ │ -
6#define DUNE_DUAL_Q1_LOCALCOEFFICIENTS_HH
│ │ │ │ +
5#ifndef DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI_BREZZIDOUGLASMARINICUBE_HH
│ │ │ │ +
6#define DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI_BREZZIDOUGLASMARINICUBE_HH
│ │ │ │
7
│ │ │ │ -
8#include <cstddef>
│ │ │ │ -
9#include <iostream>
│ │ │ │ -
10#include <vector>
│ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │
11
│ │ │ │ - │ │ │ │ -
13
│ │ │ │ -
14namespace Dune
│ │ │ │ -
15{
│ │ │ │ -
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 };
│ │ │ │ -
│ │ │ │ -
50
│ │ │ │ -
51}
│ │ │ │ -
52
│ │ │ │ -
53#endif
│ │ │ │ - │ │ │ │ +
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
│ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │
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
│ │ │ │ +
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,77 +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_q_1 │ │ │ │ │ -dualq1localcoefficients.hh │ │ │ │ │ + * _b_r_e_z_z_i_d_o_u_g_l_a_s_m_a_r_i_n_i │ │ │ │ │ +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_DUAL_Q1_LOCALCOEFFICIENTS_HH │ │ │ │ │ -6#define DUNE_DUAL_Q1_LOCALCOEFFICIENTS_HH │ │ │ │ │ +5#ifndef DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI_BREZZIDOUGLASMARINICUBE_HH │ │ │ │ │ +6#define DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI_BREZZIDOUGLASMARINICUBE_HH │ │ │ │ │ 7 │ │ │ │ │ -8#include │ │ │ │ │ -9#include │ │ │ │ │ -10#include │ │ │ │ │ +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#include <_d_u_n_e_/_l_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 _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 │ │ │ │ │ +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 │ │ │ │ │ _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_:_:_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/a00080.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: dualpq1factory.hh File Reference │ │ │ │ +dune-localfunctions: brezzidouglasmarini2simplex2dlocalbasis.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -65,34 +65,37 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ Classes | │ │ │ │ Namespaces
│ │ │ │ -
dualpq1factory.hh File Reference
│ │ │ │ +
brezzidouglasmarini2simplex2dlocalbasis.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 <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::DualPQ1LocalFiniteElementCache< D, R, dim, faceDual >
class  Dune::BDM2Simplex2DLocalBasis< D, R >
 First order Brezzi-Douglas-Marini shape functions on quadrilaterals. More...
 
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ Namespaces

namespace  Dune
 
│ │ │ │ ├── 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 │ │ │ │ │ - * _d_u_a_l_m_o_r_t_a_r_b_a_s_i_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 │ │ │ │ │ -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> │ │ │ │ │ +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" │ │ │ │ │ _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_:_:_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/a00080_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: dualpq1factory.hh Source File │ │ │ │ +dune-localfunctions: brezzidouglasmarini2simplex2dlocalbasis.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -70,118 +70,334 @@ │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
dualpq1factory.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_DUAL_P1_Q1_FACTORY_HH
│ │ │ │ -
6#define DUNE_LOCALFUNCTIONS_DUAL_P1_Q1_FACTORY_HH
│ │ │ │ +
5#ifndef DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI2_SIMPLEX2D_LOCALBASIS_HH
│ │ │ │ +
6#define DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI2_SIMPLEX2D_LOCALBASIS_HH
│ │ │ │
7
│ │ │ │ -
8#include <map>
│ │ │ │ -
9
│ │ │ │ - │ │ │ │ - │ │ │ │ +
8#include <array>
│ │ │ │ +
9#include <bitset>
│ │ │ │ +
10#include <numeric>
│ │ │ │ +
11#include <vector>
│ │ │ │
12
│ │ │ │ - │ │ │ │ +
13#include <dune/common/fmatrix.hh>
│ │ │ │
14
│ │ │ │ -
15namespace Dune {
│ │ │ │ +
15#include "../../common/localbasis.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 }
│ │ │ │ -
│ │ │ │ -
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
│ │ │ │ +
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#endif // DUNE_LOCALFUNCTIONS_DUAL_P1_Q1_FACTORY_HH
│ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ +
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
│ │ │ │
Definition bdfmcube.hh:18
│ │ │ │ -
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
│ │ │ │ +
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,137 +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 │ │ │ │ │ - * _d_u_a_l_m_o_r_t_a_r_b_a_s_i_s │ │ │ │ │ -dualpq1factory.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_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_DUAL_P1_Q1_FACTORY_HH │ │ │ │ │ -6#define DUNE_LOCALFUNCTIONS_DUAL_P1_Q1_FACTORY_HH │ │ │ │ │ +5#ifndef DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI2_SIMPLEX2D_LOCALBASIS_HH │ │ │ │ │ +6#define DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI2_SIMPLEX2D_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_/_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> │ │ │ │ │ +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_/_d_u_a_l_m_o_r_t_a_r_b_a_s_i_s_._h_h> │ │ │ │ │ +13#include │ │ │ │ │ 14 │ │ │ │ │ -15namespace _D_u_n_e { │ │ │ │ │ +15#include "../../common/localbasis.hh" │ │ │ │ │ 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 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()) │ │ │ │ │ -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 │ │ │ │ │ +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#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 │ │ │ │ │ +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 │ │ │ │ │ _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_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_:_:_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 │ │ │ │ │ =============================================================================== │ │ │ │ │ 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: dualp1localinterpolation.hh File Reference │ │ │ │ +dune-localfunctions: brezzidouglasmarini2simplex2dlocalinterpolation.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -65,31 +65,33 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ Classes | │ │ │ │ Namespaces
│ │ │ │ -
dualp1localinterpolation.hh File Reference
│ │ │ │ +
brezzidouglasmarini2simplex2dlocalinterpolation.hh File Reference
│ │ │ │
│ │ │ │
│ │ │ │
#include <vector>
│ │ │ │ +#include <dune/geometry/quadraturerules.hh>
│ │ │ │
│ │ │ │

Go to the source code of this file.

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

│ │ │ │ Classes

class  Dune::DualP1LocalInterpolation< dim, LB >
class  Dune::BDM2Simplex2DLocalInterpolation< LB >
 First order Brezzi-Douglas-Marini shape functions on triangles. 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 │ │ │ │ │ - * _d_u_a_l_m_o_r_t_a_r_b_a_s_i_s │ │ │ │ │ - * _d_u_a_l_p_1 │ │ │ │ │ + * _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 │ │ │ │ │ -dualp1localinterpolation.hh File Reference │ │ │ │ │ +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_:_:_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_:_:_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/a00083_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: dualp1localinterpolation.hh Source File │ │ │ │ +dune-localfunctions: brezzidouglasmarini2simplex2dlocalinterpolation.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -70,85 +70,155 @@ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
dualp1localinterpolation.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_DUAL_P1_LOCALINTERPOLATION_HH
│ │ │ │ -
6#define DUNE_DUAL_P1_LOCALINTERPOLATION_HH
│ │ │ │ +
5#ifndef DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI2_SIMPLEX2D_LOCALINTERPOLATION_HH
│ │ │ │ +
6#define DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI2_SIMPLEX2D_LOCALINTERPOLATION_HH
│ │ │ │
7
│ │ │ │
8#include <vector>
│ │ │ │
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 }
│ │ │ │ -
│ │ │ │ -
57
│ │ │ │ -
58 };
│ │ │ │ -
│ │ │ │ -
59}
│ │ │ │ -
60
│ │ │ │ -
61#endif
│ │ │ │ +
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 }
│ │ │ │ +
│ │ │ │ +
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
│ │ │ │ -
Definition dualp1localinterpolation.hh:17
│ │ │ │ -
void interpolate(const F &f, std::vector< C > &out) const
Local interpolation of a function.
Definition dualp1localinterpolation.hh:21
│ │ │ │ +
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,78 +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 │ │ │ │ │ - * _d_u_a_l_m_o_r_t_a_r_b_a_s_i_s │ │ │ │ │ - * _d_u_a_l_p_1 │ │ │ │ │ -dualp1localinterpolation.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_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_DUAL_P1_LOCALINTERPOLATION_HH │ │ │ │ │ -6#define DUNE_DUAL_P1_LOCALINTERPOLATION_HH │ │ │ │ │ +5#ifndef │ │ │ │ │ +DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI2_SIMPLEX2D_LOCALINTERPOLATION_HH │ │ │ │ │ +6#define │ │ │ │ │ +DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI2_SIMPLEX2D_LOCALINTERPOLATION_HH │ │ │ │ │ 7 │ │ │ │ │ 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 │ │ │ │ │ +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 } │ │ │ │ │ +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_:_:_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 │ │ │ │ │ +_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 │ │ │ │ │ -Local interpolation of a function. │ │ │ │ │ -DDeeffiinniittiioonn dualp1localinterpolation.hh:21 │ │ │ │ │ +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/a00086.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: dualp1localcoefficients.hh File Reference │ │ │ │ +dune-localfunctions: brezzidouglasmarini2simplex2dlocalcoefficients.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -65,34 +65,34 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ Classes | │ │ │ │ Namespaces
│ │ │ │ -
dualp1localcoefficients.hh File Reference
│ │ │ │ +
brezzidouglasmarini2simplex2dlocalcoefficients.hh File Reference
│ │ │ │
│ │ │ │
│ │ │ │
#include <cstddef>
│ │ │ │ #include <vector>
│ │ │ │ -#include <dune/localfunctions/common/localkey.hh>
│ │ │ │ +#include "../../common/localkey.hh"
│ │ │ │
│ │ │ │

Go to the source code of this file.

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

│ │ │ │ Classes

class  Dune::DualP1LocalCoefficients< dim >
 Local coefficients for dual simplex P1 elements. More...
class  Dune::BDM2Simplex2DLocalCoefficients
 Layout map for Brezzi-Douglas-Marini-2 elements on triangles. 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 │ │ │ │ │ - * _d_u_a_l_m_o_r_t_a_r_b_a_s_i_s │ │ │ │ │ - * _d_u_a_l_p_1 │ │ │ │ │ + * _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 │ │ │ │ │ -dualp1localcoefficients.hh File Reference │ │ │ │ │ +brezzidouglasmarini2simplex2dlocalcoefficients.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 "_._._/_._._/_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_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_._._. │ │ │ │ │ +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/a00086_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: dualp1localcoefficients.hh Source File │ │ │ │ +dune-localfunctions: brezzidouglasmarini2simplex2dlocalcoefficients.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -70,78 +70,84 @@ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
dualp1localcoefficients.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_DUAL_P1_LOCALCOEFFICIENTS_HH
│ │ │ │ -
6#define DUNE_DUAL_P1_LOCALCOEFFICIENTS_HH
│ │ │ │ +
5#ifndef DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI2_SIMPLEX2D_LOCALCOEFFICIENTS_HH
│ │ │ │ +
6#define DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI2_SIMPLEX2D_LOCALCOEFFICIENTS_HH
│ │ │ │
7
│ │ │ │
8#include <cstddef>
│ │ │ │
9#include <vector>
│ │ │ │
10
│ │ │ │ - │ │ │ │ +
11#include "../../common/localkey.hh"
│ │ │ │
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 };
│ │ │ │ +
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
│ │ │ │ -
49}
│ │ │ │ -
50
│ │ │ │ -
51#endif
│ │ │ │ - │ │ │ │ +
│ │ │ │ +
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
│ │ │ │
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
│ │ │ │ -
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,76 +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 │ │ │ │ │ - * _d_u_a_l_m_o_r_t_a_r_b_a_s_i_s │ │ │ │ │ - * _d_u_a_l_p_1 │ │ │ │ │ -dualp1localcoefficients.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_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_DUAL_P1_LOCALCOEFFICIENTS_HH │ │ │ │ │ -6#define DUNE_DUAL_P1_LOCALCOEFFICIENTS_HH │ │ │ │ │ +5#ifndef │ │ │ │ │ +DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI2_SIMPLEX2D_LOCALCOEFFICIENTS_HH │ │ │ │ │ +6#define │ │ │ │ │ +DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI2_SIMPLEX2D_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> │ │ │ │ │ +11#include "../../common/localkey.hh" │ │ │ │ │ 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 │ │ │ │ │ +_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 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 }; │ │ │ │ │ +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 │ │ │ │ │ -49} │ │ │ │ │ -50 │ │ │ │ │ -51#endif │ │ │ │ │ -_l_o_c_a_l_k_e_y_._h_h │ │ │ │ │ +_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_:_:_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() │ │ │ │ │ +_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 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 │ │ │ │ │ +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 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 │ │ │ │ │ +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 dualp1localcoefficients.hh:34 │ │ │ │ │ +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/a00089.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: dualp1localbasis.hh File Reference │ │ │ │ +dune-localfunctions: brezzidouglasmarini1cube2dlocalcoefficients.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -65,35 +65,34 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ Classes | │ │ │ │ Namespaces
│ │ │ │ -
dualp1localbasis.hh File Reference
│ │ │ │ +
brezzidouglasmarini1cube2dlocalcoefficients.hh File Reference
│ │ │ │
│ │ │ │
│ │ │ │ -
#include <numeric>
│ │ │ │ -#include <dune/common/fvector.hh>
│ │ │ │ -#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::DualP1LocalBasis< D, R, dim, faceDualT >
 Dual Lagrange shape functions on the simplex. More...
class  Dune::BDM1Cube2DLocalCoefficients
 Layout map for Brezzi-Douglas-Marini-1 elements on quadrilaterals. 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 │ │ │ │ │ - * _d_u_a_l_m_o_r_t_a_r_b_a_s_i_s │ │ │ │ │ - * _d_u_a_l_p_1 │ │ │ │ │ + * _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 │ │ │ │ │ -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> │ │ │ │ │ +brezzidouglasmarini1cube2dlocalcoefficients.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_:_:_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_:_:_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. │ │ │ │ │ + _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: dualp1localbasis.hh Source File │ │ │ │ +dune-localfunctions: brezzidouglasmarini1cube2dlocalcoefficients.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -70,147 +70,78 @@ │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
dualp1localbasis.hh
│ │ │ │ +
brezzidouglasmarini1cube2dlocalcoefficients.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_BREZZIDOUGLASMARINI1_CUBE2D_LOCALCOEFFICIENTS_HH
│ │ │ │ +
6#define DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI1_CUBE2D_LOCALCOEFFICIENTS_HH
│ │ │ │
7
│ │ │ │ -
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;
│ │ │ │ +
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
│ │ │ │ +
│ │ │ │ +
38 std::size_t size () const
│ │ │ │ +
39 {
│ │ │ │ +
40 return 8;
│ │ │ │ +
41 }
│ │ │ │ +
│ │ │ │
42
│ │ │ │
│ │ │ │ -
44 unsigned int size () const
│ │ │ │ +
44 const LocalKey& localKey (std::size_t i) const
│ │ │ │
45 {
│ │ │ │ -
46 return dim+1;
│ │ │ │ +
46 return li[i];
│ │ │ │
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 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 };
│ │ │ │ +
49 private:
│ │ │ │ +
50 std::vector<LocalKey> li;
│ │ │ │ +
51 };
│ │ │ │
│ │ │ │ -
125}
│ │ │ │ -
126#endif
│ │ │ │ +
52}
│ │ │ │ +
53#endif // DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI1_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
│ │ │ │ -
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
│ │ │ │ - │ │ │ │ +
Layout map for Brezzi-Douglas-Marini-1 elements on quadrilaterals.
Definition brezzidouglasmarini1cube2dlocalcoefficients.hh:24
│ │ │ │ +
BDM1Cube2DLocalCoefficients()
Standard constructor.
Definition brezzidouglasmarini1cube2dlocalcoefficients.hh:28
│ │ │ │ +
std::size_t size() const
number of coefficients
Definition brezzidouglasmarini1cube2dlocalcoefficients.hh:38
│ │ │ │ +
const LocalKey & localKey(std::size_t i) const
get i'th index
Definition brezzidouglasmarini1cube2dlocalcoefficients.hh:44
│ │ │ │ +
Describe position of one degree of freedom.
Definition localkey.hh:24
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,163 +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 │ │ │ │ │ - * _d_u_a_l_m_o_r_t_a_r_b_a_s_i_s │ │ │ │ │ - * _d_u_a_l_p_1 │ │ │ │ │ -dualp1localbasis.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_2_d │ │ │ │ │ +brezzidouglasmarini1cube2dlocalcoefficients.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_BREZZIDOUGLASMARINI1_CUBE2D_LOCALCOEFFICIENTS_HH │ │ │ │ │ +6#define DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI1_CUBE2D_LOCALCOEFFICIENTS_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_/_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; │ │ │ │ │ +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_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_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(8) │ │ │ │ │ +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 │ │ │ │ │ +_3_8 std::size_t _s_i_z_e () const │ │ │ │ │ +39 { │ │ │ │ │ +40 return 8; │ │ │ │ │ +41 } │ │ │ │ │ 42 │ │ │ │ │ -_4_4 unsigned int _s_i_z_e () const │ │ │ │ │ +_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 dim+1; │ │ │ │ │ +46 return li[i]; │ │ │ │ │ 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; 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 │ │ │ │ │ +49 private: │ │ │ │ │ +50 std::vector li; │ │ │ │ │ +51 }; │ │ │ │ │ +52} │ │ │ │ │ +53#endif / │ │ │ │ │ +/ DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI1_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_:_:_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 │ │ │ │ │ -_l_o_c_a_l_b_a_s_i_s_._h_h │ │ │ │ │ +_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_C_o_e_f_f_i_c_i_e_n_t_s_:_:_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 │ │ │ │ │ +BDM1Cube2DLocalCoefficients() │ │ │ │ │ +Standard constructor. │ │ │ │ │ +DDeeffiinniittiioonn brezzidouglasmarini1cube2dlocalcoefficients.hh:28 │ │ │ │ │ +_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_:_:_s_i_z_e │ │ │ │ │ +std::size_t size() const │ │ │ │ │ +number of coefficients │ │ │ │ │ +DDeeffiinniittiioonn brezzidouglasmarini1cube2dlocalcoefficients.hh:38 │ │ │ │ │ +_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_:_:_l_o_c_a_l_K_e_y │ │ │ │ │ +const LocalKey & localKey(std::size_t i) const │ │ │ │ │ +get i'th index │ │ │ │ │ +DDeeffiinniittiioonn brezzidouglasmarini1cube2dlocalcoefficients.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/a00092.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: dualp1.hh File Reference │ │ │ │ +dune-localfunctions: brezzidouglasmarini1cube2dlocalinterpolation.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -65,36 +65,33 @@ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ Classes | │ │ │ │ Namespaces
│ │ │ │ -
dualp1.hh File Reference
│ │ │ │ +
brezzidouglasmarini1cube2dlocalinterpolation.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 <vector>
│ │ │ │ +#include <dune/geometry/quadraturerules.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::BDM1Cube2DLocalInterpolation< LB >
 First order Brezzi-Douglas-Marini shape functions on the reference quadrilateral. 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 │ │ │ │ │ - * _d_u_a_l_m_o_r_t_a_r_b_a_s_i_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 │ │ │ │ │ -dualp1.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_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" │ │ │ │ │ +brezzidouglasmarini1cube2dlocalinterpolation.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_:_:_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_:_:_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/a00092_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: dualp1.hh Source File │ │ │ │ +dune-localfunctions: brezzidouglasmarini1cube2dlocalinterpolation.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -70,118 +70,139 @@ │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
dualp1.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_DUALMORTARBASIS_DUALP1_HH
│ │ │ │ -
6#define DUNE_LOCALFUNCTIONS_DUALMORTARBASIS_DUALP1_HH
│ │ │ │ +
5#ifndef DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI1_CUBE2D_LOCALINTERPOLATION_HH
│ │ │ │ +
6#define DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI1_CUBE2D_LOCALINTERPOLATION_HH
│ │ │ │
7
│ │ │ │ -
8#include <dune/geometry/type.hh>
│ │ │ │ +
8#include <vector>
│ │ │ │
9
│ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ +
10#include <dune/geometry/quadraturerules.hh>
│ │ │ │ +
11
│ │ │ │ +
12namespace Dune
│ │ │ │ +
13{
│ │ │ │
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 };
│ │ │ │ -
│ │ │ │ +
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
│ │ │ │ -
88
│ │ │ │ -
89}
│ │ │ │ -
90
│ │ │ │ -
91#endif
│ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ +
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 };
│ │ │ │ +
│ │ │ │ +
126}
│ │ │ │ +
127#endif // DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI1_CUBE2D_LOCALINTERPOLATION_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 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
│ │ │ │ +
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,130 +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 │ │ │ │ │ - * _d_u_a_l_m_o_r_t_a_r_b_a_s_i_s │ │ │ │ │ -dualp1.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_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_DUALMORTARBASIS_DUALP1_HH │ │ │ │ │ -6#define DUNE_LOCALFUNCTIONS_DUALMORTARBASIS_DUALP1_HH │ │ │ │ │ +5#ifndef DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI1_CUBE2D_LOCALINTERPOLATION_HH │ │ │ │ │ +6#define DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI1_CUBE2D_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 "_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" │ │ │ │ │ +10#include │ │ │ │ │ +11 │ │ │ │ │ +12namespace _D_u_n_e │ │ │ │ │ +13{ │ │ │ │ │ 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 }; │ │ │ │ │ +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 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 │ │ │ │ │ -88 │ │ │ │ │ -89} │ │ │ │ │ -90 │ │ │ │ │ -91#endif │ │ │ │ │ -_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_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_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 │ │ │ │ │ +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_:_:_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_:_:_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 brezzidouglasmarini1cube2dlocalinterpolation.hh:29 │ │ │ │ │ =============================================================================== │ │ │ │ │ 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: dualq1.hh File Reference │ │ │ │ +dune-localfunctions: brezzidouglasmarini1cube2dlocalbasis.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -65,42 +65,37 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ Classes | │ │ │ │ Namespaces
│ │ │ │ -
dualq1.hh File Reference
│ │ │ │ +
brezzidouglasmarini1cube2dlocalbasis.hh File Reference
│ │ │ │
│ │ │ │
│ │ │ │
#include <array>
│ │ │ │ -#include <dune/common/fvector.hh>
│ │ │ │ +#include <bitset>
│ │ │ │ +#include <numeric>
│ │ │ │ +#include <vector>
│ │ │ │ #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 "../../common/localbasis.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::BDM1Cube2DLocalBasis< D, R >
 First order Brezzi-Douglas-Marini shape functions on the reference quadrilateral. More...
 
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ Namespaces

namespace  Dune
 
│ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,30 +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 │ │ │ │ │ + * _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 │ │ │ │ │ -dualq1.hh File Reference │ │ │ │ │ +brezzidouglasmarini1cube2dlocalbasis.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_/_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" │ │ │ │ │ +#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_:_:_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_:_:_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/a00095_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: dualq1.hh Source File │ │ │ │ +dune-localfunctions: brezzidouglasmarini1cube2dlocalbasis.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -70,264 +70,241 @@ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
dualq1.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_DUAL_Q1_LOCALFINITEELEMENT_HH
│ │ │ │ -
6#define DUNE_DUAL_Q1_LOCALFINITEELEMENT_HH
│ │ │ │ +
5#ifndef DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI1_CUBE2D_LOCALBASIS_HH
│ │ │ │ +
6#define DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI1_CUBE2D_LOCALBASIS_HH
│ │ │ │
7
│ │ │ │
8#include <array>
│ │ │ │ -
9
│ │ │ │ -
10#include <dune/common/fvector.hh>
│ │ │ │ -
11#include <dune/common/fmatrix.hh>
│ │ │ │ +
9#include <bitset>
│ │ │ │ +
10#include <numeric>
│ │ │ │ +
11#include <vector>
│ │ │ │
12
│ │ │ │ -
13#include <dune/geometry/type.hh>
│ │ │ │ -
14#include <dune/geometry/referenceelements.hh>
│ │ │ │ -
15#include <dune/geometry/quadraturerules.hh>
│ │ │ │ +
13#include <dune/common/fmatrix.hh>
│ │ │ │ +
14
│ │ │ │ +
15#include "../../common/localbasis.hh"
│ │ │ │
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();
│ │ │ │ +
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;
│ │ │ │ +
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
│ │ │ │ - │ │ │ │ -
101 DualQ1LocalCoefficients<dim> coefficients;
│ │ │ │ - │ │ │ │ -
103 };
│ │ │ │ -
│ │ │ │ +
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 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;
│ │ │ │ +
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 // 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;
│ │ │ │ +
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 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 {
│ │ │ │ +
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 const int size = 1 <<dim;
│ │ │ │ -
168 std::array<Dune::FieldVector<R, size>, size> coeffs;
│ │ │ │ +
167 out[4][0] = 0.0;
│ │ │ │ +
168 out[4][1] = 0.0;
│ │ │ │
169
│ │ │ │ -
170 // dual basis functions are linear combinations of Lagrange elements
│ │ │ │ -
171 Dune::Impl::LagrangeCubeLocalBasis<D,R,dim,1> q1Basis;
│ │ │ │ +
170 out[5][0] = 6.0*in[0] - 3.0;
│ │ │ │ +
171 out[5][1] = -6.0*in[1] + 6.0;
│ │ │ │
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;
│ │ │ │ +
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 // get geometry
│ │ │ │ -
187 const auto& geometry = refElement.template geometry<1>(i);
│ │ │ │ +
186 out[2][0] = 0.0;
│ │ │ │ +
187 out[2][1] = 0.0;
│ │ │ │
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
│ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ +
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
│ │ │ │ -
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
│ │ │ │ +
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,278 +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 │ │ │ │ │ - * _d_u_a_l_m_o_r_t_a_r_b_a_s_i_s │ │ │ │ │ -dualq1.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_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_DUAL_Q1_LOCALFINITEELEMENT_HH │ │ │ │ │ -6#define DUNE_DUAL_Q1_LOCALFINITEELEMENT_HH │ │ │ │ │ +5#ifndef DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI1_CUBE2D_LOCALBASIS_HH │ │ │ │ │ +6#define DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI1_CUBE2D_LOCALBASIS_HH │ │ │ │ │ 7 │ │ │ │ │ 8#include │ │ │ │ │ -9 │ │ │ │ │ -10#include │ │ │ │ │ -11#include │ │ │ │ │ +9#include │ │ │ │ │ +10#include │ │ │ │ │ +11#include │ │ │ │ │ 12 │ │ │ │ │ -13#include │ │ │ │ │ -14#include │ │ │ │ │ -15#include │ │ │ │ │ +13#include │ │ │ │ │ +14 │ │ │ │ │ +15#include "../../common/localbasis.hh" │ │ │ │ │ 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(); │ │ │ │ │ +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; │ │ │ │ │ +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 _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 }; │ │ │ │ │ +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 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; │ │ │ │ │ +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 // 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 { │ │ │ │ │ +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 const int size = 1 <, size> coeffs; │ │ │ │ │ +167 out[4][0] = 0.0; │ │ │ │ │ +168 out[4][1] = 0.0; │ │ │ │ │ 169 │ │ │ │ │ -170 // dual basis functions are linear combinations of Lagrange elements │ │ │ │ │ -171 Dune::Impl::LagrangeCubeLocalBasis q1Basis; │ │ │ │ │ +170 out[5][0] = 6.0*in[0] - 3.0; │ │ │ │ │ +171 out[5][1] = -6.0*in[1] + 6.0; │ │ │ │ │ 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; │ │ │ │ │ +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 // get geometry │ │ │ │ │ -187 const auto& geometry = refElement.template geometry<1>(i); │ │ │ │ │ +186 out[2][0] = 0.0; │ │ │ │ │ +187 out[2][1] = 0.0; │ │ │ │ │ 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 sign_; │ │ │ │ │ +220 }; │ │ │ │ │ +221} │ │ │ │ │ +222#endif // DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI1_CUBE2D_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_:_:_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 │ │ │ │ │ +_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 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 │ │ │ │ │ +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/a00098.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: simplexp1bubble.hh File Reference │ │ │ │ +dune-localfunctions: brezzidouglasmarini1simplex2dlocalbasis.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -65,36 +65,37 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ Classes | │ │ │ │ Namespaces
│ │ │ │ -
simplexp1bubble.hh File Reference
│ │ │ │ +
brezzidouglasmarini1simplex2dlocalbasis.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 <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::SimplexP1BubbleLocalFiniteElement< D, R, dim >
 Linear Lagrange functions enriched with an element bubble function. More...
class  Dune::BDM1Simplex2DLocalBasis< D, R >
 First order Brezzi-Douglas-Marini shape functions on the reference triangle. More...
 
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ Namespaces

namespace  Dune
 
│ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,25 +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 │ │ │ │ │ - * _e_n_r_i_c_h_e_d │ │ │ │ │ + * _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 │ │ │ │ │ -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> │ │ │ │ │ +brezzidouglasmarini1simplex2dlocalbasis.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_:_:_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_:_:_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_._._. │ │ │ │ │   │ │ │ │ │ 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/a00098_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: simplexp1bubble.hh Source File │ │ │ │ +dune-localfunctions: brezzidouglasmarini1simplex2dlocalbasis.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -70,116 +70,215 @@ │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
simplexp1bubble.hh
│ │ │ │ +
brezzidouglasmarini1simplex2dlocalbasis.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_LOCALFUNCTIONS_BREZZIDOUGLASMARINI1_SIMPLEX2D_LOCALBASIS_HH
│ │ │ │ +
6#define DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI1_SIMPLEX2D_LOCALBASIS_HH
│ │ │ │
7
│ │ │ │ -
8#include <dune/geometry/type.hh>
│ │ │ │ -
9
│ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ +
8#include <array>
│ │ │ │ +
9#include <bitset>
│ │ │ │ +
10#include <numeric>
│ │ │ │ +
11#include <vector>
│ │ │ │ +
12
│ │ │ │ +
13#include <dune/common/fmatrix.hh>
│ │ │ │
14
│ │ │ │ -
15
│ │ │ │ -
16namespace Dune
│ │ │ │ -
17{
│ │ │ │ -
43 template<class D, class R, int dim>
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
45 {
│ │ │ │ -
46 public:
│ │ │ │ - │ │ │ │ -
49
│ │ │ │ - │ │ │ │ -
52
│ │ │ │ - │ │ │ │ -
55
│ │ │ │ - │ │ │ │ -
58
│ │ │ │ +
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
│ │ │ │ -
│ │ │ │ -
61 const LocalBasisType& localBasis () const
│ │ │ │ -
62 {
│ │ │ │ -
63 return basis_;
│ │ │ │ -
64 }
│ │ │ │ -
│ │ │ │ -
65
│ │ │ │ -
│ │ │ │ - │ │ │ │ +
│ │ │ │ +
66 inline void evaluateFunction (const typename Traits::DomainType& in,
│ │ │ │ +
67 std::vector<typename Traits::RangeType>& out) const
│ │ │ │
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 };
│ │ │ │ -
│ │ │ │ +
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} // end namespace Dune
│ │ │ │ -
97
│ │ │ │ -
98#endif // DUNE_LOCALFUNCTIONS_ENRICHED_SIMPLEXP1BUBBLE_HH
│ │ │ │ - │ │ │ │ +
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 };
│ │ │ │ +
│ │ │ │ +
195}
│ │ │ │ +
196#endif // DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI1_SIMPLEX2D_LOCALBASIS_HH
│ │ │ │
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
│ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ +
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
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,133 +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 │ │ │ │ │ - * _e_n_r_i_c_h_e_d │ │ │ │ │ -simplexp1bubble.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 │ │ │ │ │ +brezzidouglasmarini1simplex2dlocalbasis.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_LOCALFUNCTIONS_BREZZIDOUGLASMARINI1_SIMPLEX2D_LOCALBASIS_HH │ │ │ │ │ +6#define DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI1_SIMPLEX2D_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_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> │ │ │ │ │ +8#include │ │ │ │ │ +9#include │ │ │ │ │ +10#include │ │ │ │ │ +11#include │ │ │ │ │ +12 │ │ │ │ │ +13#include │ │ │ │ │ 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 │ │ │ │ │ +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_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 │ │ │ │ │ -_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 │ │ │ │ │ +_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 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 }; │ │ │ │ │ +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} // 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 │ │ │ │ │ +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 │ │ │ │ │ _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_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 │ │ │ │ │ +_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() │ │ │ │ │ +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 │ │ │ │ │ =============================================================================== │ │ │ │ │ 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: rannachertureklocalbasis.hh File Reference │ │ │ │ +dune-localfunctions: brezzidouglasmarini1cube3d.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -65,34 +65,36 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ Classes | │ │ │ │ Namespaces
│ │ │ │ -
rannachertureklocalbasis.hh File Reference
│ │ │ │ +
brezzidouglasmarini1cube3d.hh File Reference
│ │ │ │
│ │ │ │
│ │ │ │ -
#include "rannacherturek2d/rannacherturek2dlocalbasis.hh"
│ │ │ │ -#include "rannacherturek3d/rannacherturek3dlocalbasis.hh"
│ │ │ │ + │ │ │ │

Go to the source code of this file.

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

│ │ │ │ Classes

struct  Dune::RannacherTurekLocalBasis< D, R, 2 >
 
struct  Dune::RannacherTurekLocalBasis< D, R, 3 >
class  Dune::BDM1Cube3DLocalFiniteElement< D, R >
 First order Brezzi-Douglas-Marini shape functions on hexahedron. More...
 
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ Namespaces

namespace  Dune
 
│ │ │ │ ├── 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 │ │ │ │ │ - * _r_a_n_n_a_c_h_e_r_t_u_r_e_k │ │ │ │ │ + * _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 │ │ │ │ │ -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" │ │ │ │ │ +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 │ │ │ │ │ -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_:_:_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/a00110_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: rannachertureklocalbasis.hh Source File │ │ │ │ +dune-localfunctions: brezzidouglasmarini1cube3d.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -70,60 +70,123 @@ │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
rannachertureklocalbasis.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_RANNACHER_TUREK_LOCALBASIS_HH
│ │ │ │ -
6#define DUNE_RANNACHER_TUREK_LOCALBASIS_HH
│ │ │ │ +
5#ifndef DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI1_QUBE3D_LOCALFINITEELEMENT_HH
│ │ │ │ +
6#define DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI1_QUBE3D_LOCALFINITEELEMENT_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 {};
│ │ │ │ +
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 {}
│ │ │ │
│ │ │ │ -
36
│ │ │ │ -
37} // namespace Dune
│ │ │ │
38
│ │ │ │ -
39#endif // #ifndef DUNE_RANNACHER_TUREK_LOCALBASIS_HH
│ │ │ │ - │ │ │ │ - │ │ │ │ +
│ │ │ │ + │ │ │ │ +
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
│ │ │ │ -
Definition rannacherturek2dlocalbasis.hh:24
│ │ │ │ -
Definition rannacherturek3dlocalbasis.hh:24
│ │ │ │ -
Rannacher-Turek shape functions.
Definition rannachertureklocalbasis.hh:25
│ │ │ │ +
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
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,52 +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 │ │ │ │ │ - * _r_a_n_n_a_c_h_e_r_t_u_r_e_k │ │ │ │ │ -rannachertureklocalbasis.hh │ │ │ │ │ + * _b_r_e_z_z_i_d_o_u_g_l_a_s_m_a_r_i_n_i │ │ │ │ │ +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_RANNACHER_TUREK_LOCALBASIS_HH │ │ │ │ │ -6#define DUNE_RANNACHER_TUREK_LOCALBASIS_HH │ │ │ │ │ +5#ifndef DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI1_QUBE3D_LOCALFINITEELEMENT_HH │ │ │ │ │ +6#define DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI1_QUBE3D_LOCALFINITEELEMENT_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 │ │ │ │ │ +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 │ │ │ │ │ +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 │ │ │ │ │ -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 │ │ │ │ │ +_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_:_:_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_:_:_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_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/a00113.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: rannachertureklocalinterpolation.hh File Reference │ │ │ │ +dune-localfunctions: brezzidouglasmarini1simplex2d.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -65,36 +65,36 @@ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ Classes | │ │ │ │ Namespaces
│ │ │ │ -
rannachertureklocalinterpolation.hh File Reference
│ │ │ │ +
brezzidouglasmarini1simplex2d.hh File Reference
│ │ │ │
│ │ │ │
│ │ │ │ -
#include <cassert>
│ │ │ │ -#include <vector>
│ │ │ │ -#include <dune/common/fvector.hh>
│ │ │ │ -#include <dune/geometry/referenceelements.hh>
│ │ │ │ -#include <dune/localfunctions/common/localbasis.hh>
│ │ │ │ + │ │ │ │

Go to the source code of this file.

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

│ │ │ │ Classes

class  Dune::RannacherTurekLocalInterpolation< D, R, d >
 please doc me More...
class  Dune::BDM1Simplex2DLocalFiniteElement< D, R >
 First order Brezzi-Douglas-Marini shape functions on triangles. 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 │ │ │ │ │ - * _r_a_n_n_a_c_h_e_r_t_u_r_e_k │ │ │ │ │ + * _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 │ │ │ │ │ -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> │ │ │ │ │ +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" │ │ │ │ │ _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_._._. │ │ │ │ │ +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/a00113_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: rannachertureklocalinterpolation.hh Source File │ │ │ │ +dune-localfunctions: brezzidouglasmarini1simplex2d.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -70,85 +70,124 @@ │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
rannachertureklocalinterpolation.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#ifndef DUNE_RANNACHER_TUREK_LOCALINTERPOLATION_HH
│ │ │ │ -
6#define DUNE_RANNACHER_TUREK_LOCALINTERPOLATION_HH
│ │ │ │ +
5#ifndef DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI1_SIMPLEX2D_LOCALFINITEELEMENT_HH
│ │ │ │ +
6#define DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI1_SIMPLEX2D_LOCALFINITEELEMENT_HH
│ │ │ │
7
│ │ │ │ -
8#include <cassert>
│ │ │ │ -
9#include <vector>
│ │ │ │ -
10
│ │ │ │ -
11#include <dune/common/fvector.hh>
│ │ │ │ -
12
│ │ │ │ -
13#include <dune/geometry/referenceelements.hh>
│ │ │ │ +
8#include <dune/geometry/type.hh>
│ │ │ │ +
9
│ │ │ │ +
10#include "../common/localfiniteelementtraits.hh"
│ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │
14
│ │ │ │ - │ │ │ │ -
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;
│ │ │ │ +
15namespace Dune
│ │ │ │ +
16{
│ │ │ │ +
17
│ │ │ │ +
26 template<class D, class R>
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
28 {
│ │ │ │ +
29
│ │ │ │ +
30 public:
│ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │
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
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
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::triangle;
│ │ │ │ +
74 }
│ │ │ │ +
│ │ │ │ +
75
│ │ │ │ +
76 private:
│ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ +
80 };
│ │ │ │ +
│ │ │ │ +
81}
│ │ │ │ +
82#endif // DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI1_SIMPLEX2D_LOCALFINITEELEMENT_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
│ │ │ │ - │ │ │ │ +
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,82 +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 │ │ │ │ │ -rannachertureklocalinterpolation.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#ifndef DUNE_RANNACHER_TUREK_LOCALINTERPOLATION_HH │ │ │ │ │ -6#define DUNE_RANNACHER_TUREK_LOCALINTERPOLATION_HH │ │ │ │ │ +5#ifndef │ │ │ │ │ +DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI1_SIMPLEX2D_LOCALFINITEELEMENT_HH │ │ │ │ │ +6#define │ │ │ │ │ +DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI1_SIMPLEX2D_LOCALFINITEELEMENT_HH │ │ │ │ │ 7 │ │ │ │ │ -8#include │ │ │ │ │ -9#include │ │ │ │ │ -10 │ │ │ │ │ -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_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 │ │ │ │ │ -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 │ │ │ │ │ -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; │ │ │ │ │ +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 │ │ │ │ │ -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 │ │ │ │ │ +_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 │ │ │ │ │ +_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_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_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_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_:_:_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_:_:_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/a00116.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: rannachertureklocalcoefficients.hh File Reference │ │ │ │ +dune-localfunctions: brezzidouglasmarini1cube3dlocalinterpolation.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -65,36 +65,33 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ Classes | │ │ │ │ Namespaces
│ │ │ │ -
rannachertureklocalcoefficients.hh File Reference
│ │ │ │ +
brezzidouglasmarini1cube3dlocalinterpolation.hh File Reference
│ │ │ │
│ │ │ │
│ │ │ │ -
#include <algorithm>
│ │ │ │ -#include <array>
│ │ │ │ -#include <cassert>
│ │ │ │ -#include <cstddef>
│ │ │ │ -#include <dune/localfunctions/common/localkey.hh>
│ │ │ │ +
#include <vector>
│ │ │ │ +#include <dune/geometry/quadraturerules.hh>
│ │ │ │
│ │ │ │

Go to the source code of this file.

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

│ │ │ │ Classes

struct  Dune::RannacherTurekLocalCoefficients< d >
 layout for Rannacher-Turek elements More...
class  Dune::BDM1Cube3DLocalInterpolation< LB >
 First order Brezzi-Douglas-Marini shape functions on the reference hexahedron. 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 │ │ │ │ │ + * _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 │ │ │ │ │ -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> │ │ │ │ │ +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 │ │ │ │ │ -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_:_:_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/a00116_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: rannachertureklocalcoefficients.hh Source File │ │ │ │ +dune-localfunctions: brezzidouglasmarini1cube3dlocalinterpolation.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -70,96 +70,134 @@ │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
rannachertureklocalcoefficients.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_RANNACHER_TUREK_LOCALCOEFFICIENTS_HH
│ │ │ │ -
6#define DUNE_RANNACHER_TUREK_LOCALCOEFFICIENTS_HH
│ │ │ │ +
5#ifndef DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI1_CUBE3D_LOCALINTERPOLATION_HH
│ │ │ │ +
6#define DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI1_CUBE3D_LOCALINTERPOLATION_HH
│ │ │ │
7
│ │ │ │ -
8#include <algorithm>
│ │ │ │ -
9#include <array>
│ │ │ │ -
10#include <cassert>
│ │ │ │ -
11#include <cstddef>
│ │ │ │ -
12
│ │ │ │ - │ │ │ │ +
8#include <vector>
│ │ │ │ +
9
│ │ │ │ +
10#include <dune/geometry/quadraturerules.hh>
│ │ │ │ +
11
│ │ │ │ +
12namespace Dune
│ │ │ │ +
13{
│ │ │ │
14
│ │ │ │ -
15namespace Dune
│ │ │ │ -
16{
│ │ │ │ -
25 template< unsigned int d >
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
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 }
│ │ │ │ -
│ │ │ │ -
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 };
│ │ │ │ -
│ │ │ │ -
61
│ │ │ │ -
62} // namespace Dune
│ │ │ │ -
63
│ │ │ │ -
64#endif // #ifndef DUNE_RANNACHER_TUREK_LOCALCOEFFICIENTS_HH
│ │ │ │ - │ │ │ │ +
24 template<class LB>
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
26 {
│ │ │ │ +
27
│ │ │ │ +
28 public:
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
31 {
│ │ │ │ +
32 sign0 = sign1 = sign2 = sign3 = sign4 = sign5 = 1.0;
│ │ │ │ +
33 }
│ │ │ │ +
│ │ │ │ +
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
│ │ │ │
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
│ │ │ │ +
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,96 +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 │ │ │ │ │ -rannachertureklocalcoefficients.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 │ │ │ │ │ +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_RANNACHER_TUREK_LOCALCOEFFICIENTS_HH │ │ │ │ │ -6#define DUNE_RANNACHER_TUREK_LOCALCOEFFICIENTS_HH │ │ │ │ │ +5#ifndef DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI1_CUBE3D_LOCALINTERPOLATION_HH │ │ │ │ │ +6#define DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI1_CUBE3D_LOCALINTERPOLATION_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 │ │ │ │ │ +11 │ │ │ │ │ +12namespace _D_u_n_e │ │ │ │ │ +13{ │ │ │ │ │ 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 │ │ │ │ │ -_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 │ │ │ │ │ -_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 │ │ │ │ │ -63 │ │ │ │ │ -64#endif // #ifndef DUNE_RANNACHER_TUREK_LOCALCOEFFICIENTS_HH │ │ │ │ │ -_l_o_c_a_l_k_e_y_._h_h │ │ │ │ │ +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 │ │ │ │ │ +_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 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 │ │ │ │ │ +_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_:_:_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_:_:_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 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/a00119.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: rannacherturek3dlocalbasis.hh File Reference │ │ │ │ +dune-localfunctions: brezzidouglasmarini1cube3dlocalcoefficients.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -65,35 +65,34 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ Classes | │ │ │ │ Namespaces
│ │ │ │ -
rannacherturek3dlocalbasis.hh File Reference
│ │ │ │ +
brezzidouglasmarini1cube3dlocalcoefficients.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

class  Dune::RannacherTurek3DLocalBasis< D, R >
class  Dune::BDM1Cube3DLocalCoefficients
 Layout map for Brezzi-Douglas-Marini-1 elements on hexahedra. 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_3_d │ │ │ │ │ + * _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 │ │ │ │ │ -rannacherturek3dlocalbasis.hh File Reference │ │ │ │ │ -#include │ │ │ │ │ +brezzidouglasmarini1cube3dlocalcoefficients.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 │ │ │ │ │ -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_:_:_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/a00119_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: rannacherturek3dlocalbasis.hh Source File │ │ │ │ +dune-localfunctions: brezzidouglasmarini1cube3dlocalcoefficients.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -70,167 +70,79 @@ │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
rannacherturek3dlocalbasis.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_RANNACHER_TUREK_3D_LOCALBASIS_HH
│ │ │ │ -
6#define DUNE_RANNACHER_TUREK_3D_LOCALBASIS_HH
│ │ │ │ +
5#ifndef DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI1_CUBE3D_LOCALCOEFFICIENTS_HH
│ │ │ │ +
6#define DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI1_CUBE3D_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
│ │ │ │ - │ │ │ │ +
11#include "../../common/localkey.hh"
│ │ │ │ +
12
│ │ │ │ +
13namespace Dune
│ │ │ │ +
14{
│ │ │ │
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;
│ │ │ │ +
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 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#endif // #ifndef DUNE_RANNACHER_TUREK_3D_LOCALBASIS_HH
│ │ │ │ +
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
│ │ │ │ -
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
│ │ │ │ - │ │ │ │ +
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,179 +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_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 │ │ │ │ │ + * _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 │ │ │ │ │ _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_BREZZIDOUGLASMARINI1_CUBE3D_LOCALCOEFFICIENTS_HH │ │ │ │ │ +6#define DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI1_CUBE3D_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> │ │ │ │ │ +11#include "../../common/localkey.hh" │ │ │ │ │ +12 │ │ │ │ │ +13namespace _D_u_n_e │ │ │ │ │ +14{ │ │ │ │ │ 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 │ │ │ │ │ +_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 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; │ │ │ │ │ +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 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 │ │ │ │ │ -_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#endif // #ifndef DUNE_RANNACHER_TUREK_3D_LOCALBASIS_HH │ │ │ │ │ +_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_:_:_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 │ │ │ │ │ +_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 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/a00122.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: rannacherturek2dlocalbasis.hh File Reference │ │ │ │ +dune-localfunctions: brezzidouglasmarini1cube3dlocalbasis.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -65,35 +65,37 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ Classes | │ │ │ │ Namespaces
│ │ │ │ -
rannacherturek2dlocalbasis.hh File Reference
│ │ │ │ +
brezzidouglasmarini1cube3dlocalbasis.hh File Reference
│ │ │ │
│ │ │ │
│ │ │ │ -
#include <numeric>
│ │ │ │ +
#include <array>
│ │ │ │ +#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

struct  Dune::RannacherTurek2DLocalBasis< D, R >
class  Dune::BDM1Cube3DLocalBasis< D, R >
 First order Brezzi-Douglas-Marini shape functions on the reference hexahedron. 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 │ │ │ │ │ - * _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 │ │ │ │ │ + * _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 │ │ │ │ │ -rannacherturek2dlocalbasis.hh File Reference │ │ │ │ │ +brezzidouglasmarini1cube3dlocalbasis.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 "_._._/_._._/_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_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_:_:_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/a00122_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: rannacherturek2dlocalbasis.hh Source File │ │ │ │ +dune-localfunctions: brezzidouglasmarini1cube3dlocalbasis.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -70,159 +70,322 @@ │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
rannacherturek2dlocalbasis.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#ifndef DUNE_RANNACHER_TUREK_2D_LOCALBASIS_HH
│ │ │ │ -
6#define DUNE_RANNACHER_TUREK_2D_LOCALBASIS_HH
│ │ │ │ +
5#ifndef DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI1_CUBE3D_LOCALBASIS_HH
│ │ │ │ +
6#define DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI1_CUBE3D_LOCALBASIS_HH
│ │ │ │
7
│ │ │ │ -
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 {
│ │ │ │ - │ │ │ │ -
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.
│ │ │ │ +
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>
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
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
│ │ │ │ -
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];
│ │ │ │ +
│ │ │ │ +
57 unsigned int size() const
│ │ │ │ +
58 {
│ │ │ │ +
59 return 18;
│ │ │ │
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
│ │ │ │ +
│ │ │ │ +
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
│ │ │ │
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
│ │ │ │ -
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,174 +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 │ │ │ │ │ - * _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 │ │ │ │ │ + * _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#ifndef DUNE_RANNACHER_TUREK_2D_LOCALBASIS_HH │ │ │ │ │ -6#define DUNE_RANNACHER_TUREK_2D_LOCALBASIS_HH │ │ │ │ │ +5#ifndef DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI1_CUBE3D_LOCALBASIS_HH │ │ │ │ │ +6#define DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI1_CUBE3D_LOCALBASIS_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_/_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 │ │ │ │ │ +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 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. │ │ │ │ │ +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 │ │ │ │ │ -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]; │ │ │ │ │ +_5_7 unsigned int _s_i_z_e() const │ │ │ │ │ +58 { │ │ │ │ │ +59 return 18; │ │ │ │ │ 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 │ │ │ │ │ +_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 │ │ │ │ │ _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_:_:_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 │ │ │ │ │ =============================================================================== │ │ │ │ │ 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: rannacherturek.hh File Reference │ │ │ │ +dune-localfunctions: brezzidouglasmarini2cube2d.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -65,29 +65,43 @@ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
rannacherturek.hh File Reference
│ │ │ │ +
│ │ │ │ +Classes | │ │ │ │ +Namespaces
│ │ │ │ +
brezzidouglasmarini2cube2d.hh File Reference
│ │ │ │
│ │ │ │
│ │ │ │ - │ │ │ │ -

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

│ │ │ │ -
#include <dune/localfunctions/rannacherturek/rannacherturek.hh>
│ │ │ │ + │ │ │ │

Go to the source code of this file.

│ │ │ │ -

Detailed Description

│ │ │ │ -

Convenience header that includes all available Rannacher-Turek LocalFiniteElements.

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

│ │ │ │ +Classes

class  Dune::BDM2Cube2DLocalFiniteElement< D, R >
 Second order Brezzi-Douglas-Marini shape functions on quadrilaterals. More...
 
│ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ +

│ │ │ │ +Namespaces

namespace  Dune
 
│ │ │ │ +
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,16 +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 │ │ │ │ │ -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> │ │ │ │ │ + * _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 │ │ │ │ │ +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" │ │ │ │ │ _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_:_:_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/a00125_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: rannacherturek.hh Source File │ │ │ │ +dune-localfunctions: brezzidouglasmarini2cube2d.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -70,27 +70,123 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
rannacherturek.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_BREZZIDOUGLASMARINI2_QUBE2D_LOCALFINITEELEMENT_HH
│ │ │ │ +
6#define DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI2_QUBE2D_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::quadrilateral;
│ │ │ │ +
73 }
│ │ │ │ +
│ │ │ │ +
74
│ │ │ │ +
75 private:
│ │ │ │ + │ │ │ │ +
77 BDM2Cube2DLocalCoefficients coefficients;
│ │ │ │ + │ │ │ │ +
79 };
│ │ │ │ +
│ │ │ │ +
80}
│ │ │ │ +
81#endif // DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI2_QUBE2D_LOCALFINITEELEMENT_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
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,17 +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 │ │ │ │ │ -rannacherturek.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 │ │ │ │ │ -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_BREZZIDOUGLASMARINI2_QUBE2D_LOCALFINITEELEMENT_HH │ │ │ │ │ +6#define DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI2_QUBE2D_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_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 │ │ │ │ │ +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_:_:_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 │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00128.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: orthonormal.hh File Reference │ │ │ │ +dune-localfunctions: brezzidouglasmarini2cube2dlocalcoefficients.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -65,35 +65,34 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ Classes | │ │ │ │ Namespaces
│ │ │ │ -
orthonormal.hh File Reference
│ │ │ │ +
brezzidouglasmarini2cube2dlocalcoefficients.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 <cstddef>
│ │ │ │ +#include <vector>
│ │ │ │ +#include "../../common/localkey.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...
class  Dune::BDM2Cube2DLocalCoefficients
 Layout map for Brezzi-Douglas-Marini-2 elements on quadrilaterals. 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 │ │ │ │ │ + * _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 │ │ │ │ │ -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> │ │ │ │ │ +brezzidouglasmarini2cube2dlocalcoefficients.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_:_:_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_._._. │ │ │ │ │ +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/a00128_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: orthonormal.hh Source File │ │ │ │ +dune-localfunctions: brezzidouglasmarini2cube2dlocalcoefficients.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -70,71 +70,81 @@ │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
orthonormal.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_ORTHONORMALFINITEELEMENT_HH
│ │ │ │ -
6#define DUNE_ORTHONORMALFINITEELEMENT_HH
│ │ │ │ +
5#ifndef DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI2_CUBE2D_LOCALCOEFFICIENTS_HH
│ │ │ │ +
6#define DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI2_CUBE2D_LOCALCOEFFICIENTS_HH
│ │ │ │
7
│ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ +
8#include <cstddef>
│ │ │ │ +
9#include <vector>
│ │ │ │ +
10
│ │ │ │ +
11#include "../../common/localkey.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 {}
│ │ │ │ +
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 }
│ │ │ │
│ │ │ │ -
50 };
│ │ │ │ +
45
│ │ │ │ +
│ │ │ │ +
47 const LocalKey& localKey(std::size_t i) const
│ │ │ │ +
48 {
│ │ │ │ +
49 return li[i];
│ │ │ │ +
50 }
│ │ │ │
│ │ │ │
51
│ │ │ │ -
52}
│ │ │ │ -
53
│ │ │ │ -
54#endif
│ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ +
52 private:
│ │ │ │ +
53 std::vector<LocalKey> li;
│ │ │ │ +
54 };
│ │ │ │ +
│ │ │ │ +
55} // end namespace Dune
│ │ │ │ +
56#endif // DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI2_CUBE2D_LOCALCOEFFICIENTS_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
│ │ │ │ - │ │ │ │ +
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,76 +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 │ │ │ │ │ -orthonormal.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_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_ORTHONORMALFINITEELEMENT_HH │ │ │ │ │ -6#define DUNE_ORTHONORMALFINITEELEMENT_HH │ │ │ │ │ +5#ifndef DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI2_CUBE2D_LOCALCOEFFICIENTS_HH │ │ │ │ │ +6#define DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI2_CUBE2D_LOCALCOEFFICIENTS_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 "../../common/localkey.hh" │ │ │ │ │ 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 }; │ │ │ │ │ +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} │ │ │ │ │ -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 │ │ │ │ │ +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_:_:_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 │ │ │ │ │ +_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 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/a00131.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: lagrangecube.hh File Reference │ │ │ │ +dune-localfunctions: brezzidouglasmarini2cube2dlocalinterpolation.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -65,40 +65,33 @@ │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ Classes | │ │ │ │ Namespaces
│ │ │ │ -
lagrangecube.hh File Reference
│ │ │ │ +
brezzidouglasmarini2cube2dlocalinterpolation.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 <vector>
│ │ │ │ +#include <dune/geometry/quadraturerules.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...
class  Dune::BDM2Cube2DLocalInterpolation< LB >
 First order Brezzi-Douglas-Marini shape functions on quadrilaterals. 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 │ │ │ │ │ - * _l_a_g_r_a_n_g_e │ │ │ │ │ + * _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 │ │ │ │ │ -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> │ │ │ │ │ +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_:_:_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_._._. │ │ │ │ │ +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/a00131_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: lagrangecube.hh Source File │ │ │ │ +dune-localfunctions: brezzidouglasmarini2cube2dlocalinterpolation.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -70,741 +70,153 @@ │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
lagrangecube.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_LAGRANGE_LAGRANGECUBE_HH
│ │ │ │ -
6#define DUNE_LOCALFUNCTIONS_LAGRANGE_LAGRANGECUBE_HH
│ │ │ │ +
5#ifndef DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI2_CUBE2D_LOCALINTERPOLATION_HH
│ │ │ │ +
6#define DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI2_CUBE2D_LOCALINTERPOLATION_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>
│ │ │ │ +
8#include <vector>
│ │ │ │ +
9
│ │ │ │ +
10#include <dune/geometry/quadraturerules.hh>
│ │ │ │ +
11
│ │ │ │ +
12namespace Dune
│ │ │ │ +
13{
│ │ │ │
14
│ │ │ │ -
15#include <dune/geometry/referenceelements.hh>
│ │ │ │ -
16
│ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ -
20
│ │ │ │ -
21namespace Dune { namespace Impl
│ │ │ │ -
22{
│ │ │ │ -
23 // Forward declaration
│ │ │ │ -
24 template<class LocalBasis>
│ │ │ │ -
25 class LagrangeCubeLocalInterpolation;
│ │ │ │ +
23 template<class LB>
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
25 {
│ │ │ │
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 }
│ │ │ │ +
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(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 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 }
│ │ │ │ +
95 typename LB::Traits::DomainType localPos;
│ │ │ │ +
96
│ │ │ │ +
97 localPos[0] = 0.0;
│ │ │ │ +
98 localPos[1] = qPos;
│ │ │ │ +
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 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 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 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
│ │ │ │ - │ │ │ │ - │ │ │ │ +
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
│ │ │ │ -
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
│ │ │ │ - │ │ │ │ +
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,764 +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 │ │ │ │ │ - * _l_a_g_r_a_n_g_e │ │ │ │ │ -lagrangecube.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_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_LAGRANGE_LAGRANGECUBE_HH │ │ │ │ │ -6#define DUNE_LOCALFUNCTIONS_LAGRANGE_LAGRANGECUBE_HH │ │ │ │ │ +5#ifndef DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI2_CUBE2D_LOCALINTERPOLATION_HH │ │ │ │ │ +6#define DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI2_CUBE2D_LOCALINTERPOLATION_HH │ │ │ │ │ 7 │ │ │ │ │ -8#include │ │ │ │ │ -9#include │ │ │ │ │ -10 │ │ │ │ │ -11#include │ │ │ │ │ -12#include │ │ │ │ │ -13#include │ │ │ │ │ +8#include │ │ │ │ │ +9 │ │ │ │ │ +10#include │ │ │ │ │ +11 │ │ │ │ │ +12namespace _D_u_n_e │ │ │ │ │ +13{ │ │ │ │ │ 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; │ │ │ │ │ +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 │ │ │ │ │ -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; │ │ │ │ │ +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 │ │ │ │ │ -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 } │ │ │ │ │ +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(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 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; │ │ │ │ │ +95 typename LB::Traits::DomainType localPos; │ │ │ │ │ +96 │ │ │ │ │ +97 localPos[0] = 0.0; │ │ │ │ │ +98 localPos[1] = qPos; │ │ │ │ │ +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 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 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 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_k_e_y_._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 │ │ │ │ │ +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_:_:_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_:_:_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 brezzidouglasmarini2cube2dlocalinterpolation.hh:78 │ │ │ │ │ =============================================================================== │ │ │ │ │ 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: emptypoints.hh File Reference │ │ │ │ +dune-localfunctions: brezzidouglasmarini2cube2dlocalbasis.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -65,35 +65,37 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ Classes | │ │ │ │ Namespaces
│ │ │ │ -
emptypoints.hh File Reference
│ │ │ │ +
brezzidouglasmarini2cube2dlocalbasis.hh File Reference
│ │ │ │
│ │ │ │
│ │ │ │ -
#include <vector>
│ │ │ │ -#include <dune/common/fvector.hh>
│ │ │ │ -#include <dune/localfunctions/common/localkey.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::LagrangePoint< F, dim >
 
class  Dune::EmptyPointSet< F, dim >
class  Dune::BDM2Cube2DLocalBasis< 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 │ │ │ │ │ - * _l_a_g_r_a_n_g_e │ │ │ │ │ + * _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 │ │ │ │ │ -emptypoints.hh File Reference │ │ │ │ │ +brezzidouglasmarini2cube2dlocalbasis.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> │ │ │ │ │ +#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_:_:_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_ _> │ │ │ │ │ +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/a00134_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: emptypoints.hh Source File │ │ │ │ +dune-localfunctions: brezzidouglasmarini2cube2dlocalbasis.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -70,185 +70,320 @@ │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
emptypoints.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_LAGRANGE_EMPTYPOINTS_HH
│ │ │ │ -
6#define DUNE_LAGRANGE_EMPTYPOINTS_HH
│ │ │ │ +
5#ifndef DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI2_CUBE2D_LOCALBASIS_HH
│ │ │ │ +
6#define DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI2_CUBE2D_LOCALBASIS_HH
│ │ │ │
7
│ │ │ │ -
8#include <vector>
│ │ │ │ -
9
│ │ │ │ -
10#include <dune/common/fvector.hh>
│ │ │ │ - │ │ │ │ +
8#include <array>
│ │ │ │ +
9#include <bitset>
│ │ │ │ +
10#include <numeric>
│ │ │ │ +
11#include <vector>
│ │ │ │
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
│ │ │ │ - │ │ │ │ +
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:
│ │ │ │ + │ │ │ │ +
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
│ │ │ │
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
│ │ │ │ +
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,203 +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 │ │ │ │ │ - * _l_a_g_r_a_n_g_e │ │ │ │ │ -emptypoints.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_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_LAGRANGE_EMPTYPOINTS_HH │ │ │ │ │ -6#define DUNE_LAGRANGE_EMPTYPOINTS_HH │ │ │ │ │ +5#ifndef DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI2_CUBE2D_LOCALBASIS_HH │ │ │ │ │ +6#define DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI2_CUBE2D_LOCALBASIS_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> │ │ │ │ │ +8#include │ │ │ │ │ +9#include │ │ │ │ │ +10#include │ │ │ │ │ +11#include │ │ │ │ │ 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 │ │ │ │ │ +13#include │ │ │ │ │ +14 │ │ │ │ │ +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_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_:_:_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 │ │ │ │ │ +_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 │ │ │ │ │ +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 │ │ │ │ │ =============================================================================== │ │ │ │ │ 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: p0localcoefficients.hh File Reference │ │ │ │ +dune-localfunctions: localkey.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -65,34 +65,34 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ Classes | │ │ │ │ Namespaces
│ │ │ │ -
p0localcoefficients.hh File Reference
│ │ │ │ +
localkey.hh File Reference
│ │ │ │
│ │ │ │
│ │ │ │ -
#include <cstddef>
│ │ │ │ -#include <iostream>
│ │ │ │ -#include <vector>
│ │ │ │ -#include <dune/localfunctions/common/localkey.hh>
│ │ │ │ +
#include <array>
│ │ │ │ +#include <cstddef>
│ │ │ │ +#include <ostream>
│ │ │ │
│ │ │ │

Go to the source code of this file.

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

│ │ │ │ Classes

class  Dune::P0LocalCoefficients
class  Dune::LocalKey
 Describe position of one degree of freedom. 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 │ │ │ │ │ - * _l_a_g_r_a_n_g_e │ │ │ │ │ - * _p_0 │ │ │ │ │ + * _c_o_m_m_o_n │ │ │ │ │ _C_l_a_s_s_e_s | _N_a_m_e_s_p_a_c_e_s │ │ │ │ │ -p0localcoefficients.hh File Reference │ │ │ │ │ +localkey.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> │ │ │ │ │ +#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_0_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ +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/a00137_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: p0localcoefficients.hh Source File │ │ │ │ +dune-localfunctions: localkey.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -70,74 +70,124 @@ │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
p0localcoefficients.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_P0LOCALCOEFFICIENTS_HH
│ │ │ │ -
6#define DUNE_P0LOCALCOEFFICIENTS_HH
│ │ │ │ +
5#ifndef DUNE_LOCALKEY_HH
│ │ │ │ +
6#define DUNE_LOCALKEY_HH
│ │ │ │
7
│ │ │ │ -
8#include <cstddef>
│ │ │ │ -
9#include <iostream>
│ │ │ │ -
10#include <vector>
│ │ │ │ +
8#include <array>
│ │ │ │ +
9#include <cstddef>
│ │ │ │ +
10#include <ostream>
│ │ │ │
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;
│ │ │ │ -
41 }
│ │ │ │ -
│ │ │ │ -
42
│ │ │ │ -
43 private:
│ │ │ │ -
44 LocalKey index;
│ │ │ │ -
45 };
│ │ │ │ -
│ │ │ │ -
46
│ │ │ │ -
47}
│ │ │ │ -
48#endif
│ │ │ │ - │ │ │ │ +
12namespace Dune
│ │ │ │ +
13{
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
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 };
│ │ │ │ +
│ │ │ │ +
102
│ │ │ │ +
103}
│ │ │ │ +
104#endif
│ │ │ │
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
│ │ │ │ +
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,71 +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 │ │ │ │ │ - * _l_a_g_r_a_n_g_e │ │ │ │ │ - * _p_0 │ │ │ │ │ -p0localcoefficients.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_P0LOCALCOEFFICIENTS_HH │ │ │ │ │ -6#define DUNE_P0LOCALCOEFFICIENTS_HH │ │ │ │ │ +5#ifndef DUNE_LOCALKEY_HH │ │ │ │ │ +6#define DUNE_LOCALKEY_HH │ │ │ │ │ 7 │ │ │ │ │ -8#include │ │ │ │ │ -9#include │ │ │ │ │ -10#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 │ │ │ │ │ -_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; │ │ │ │ │ -41 } │ │ │ │ │ -42 │ │ │ │ │ -43 private: │ │ │ │ │ -44 _L_o_c_a_l_K_e_y index; │ │ │ │ │ -45 }; │ │ │ │ │ -46 │ │ │ │ │ -47} │ │ │ │ │ -48#endif │ │ │ │ │ -_l_o_c_a_l_k_e_y_._h_h │ │ │ │ │ +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 │ │ │ │ │ +_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 }; │ │ │ │ │ +102 │ │ │ │ │ +103} │ │ │ │ │ +104#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_:_:_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_:_:_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/a00140.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: p0localbasis.hh File Reference │ │ │ │ +dune-localfunctions: localfiniteelementvariantcache.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -65,33 +65,42 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ Classes | │ │ │ │ Namespaces
│ │ │ │ -
p0localbasis.hh File Reference
│ │ │ │ +
localfiniteelementvariantcache.hh File Reference
│ │ │ │
│ │ │ │
│ │ │ │ -
#include <numeric>
│ │ │ │ -#include <dune/common/fmatrix.hh>
│ │ │ │ -#include <dune/localfunctions/common/localbasis.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::P0LocalBasis< D, R, d >
class  Dune::LocalFiniteElementVariantCache< Base >
 A cache storing a compile time selection of local finite element implementations. More...
 
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ Namespaces

namespace  Dune
 
│ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,22 +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 │ │ │ │ │ - * _l_a_g_r_a_n_g_e │ │ │ │ │ - * _p_0 │ │ │ │ │ + * _c_o_m_m_o_n │ │ │ │ │ _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> │ │ │ │ │ +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_:_:_P_0_L_o_c_a_l_B_a_s_i_s_<_ _D_,_ _R_,_ _d_ _> │ │ │ │ │ +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/a00140_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: p0localbasis.hh Source File │ │ │ │ +dune-localfunctions: localfiniteelementvariantcache.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -70,109 +70,143 @@ │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
p0localbasis.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_P0LOCALBASIS_HH
│ │ │ │ -
6#define DUNE_P0LOCALBASIS_HH
│ │ │ │ +
5#ifndef DUNE_LOCALFUNCTIONS_COMMON_LOCALFINITEELEMENTVARIANTCACHE_HH
│ │ │ │ +
6#define DUNE_LOCALFUNCTIONS_COMMON_LOCALFINITEELEMENTVARIANTCACHE_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;
│ │ │ │ -
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 }
│ │ │ │ -
│ │ │ │ +
8#include <vector>
│ │ │ │ +
9#include <tuple>
│ │ │ │ +
10#include <utility>
│ │ │ │ +
11#include <type_traits>
│ │ │ │ +
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 {
│ │ │ │ +
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
│ │ │ │ -
│ │ │ │ -
80 unsigned int order () const
│ │ │ │ -
81 {
│ │ │ │ -
82 return 0;
│ │ │ │ -
83 }
│ │ │ │ -
│ │ │ │ -
84 };
│ │ │ │ -
│ │ │ │ -
85
│ │ │ │ -
86}
│ │ │ │ -
87
│ │ │ │ -
88#endif
│ │ │ │ +
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
│ │ │ │ -
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
│ │ │ │ - │ │ │ │ +
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,119 +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 │ │ │ │ │ - * _l_a_g_r_a_n_g_e │ │ │ │ │ - * _p_0 │ │ │ │ │ -p0localbasis.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_P0LOCALBASIS_HH │ │ │ │ │ -6#define DUNE_P0LOCALBASIS_HH │ │ │ │ │ +5#ifndef DUNE_LOCALFUNCTIONS_COMMON_LOCALFINITEELEMENTVARIANTCACHE_HH │ │ │ │ │ +6#define DUNE_LOCALFUNCTIONS_COMMON_LOCALFINITEELEMENTVARIANTCACHE_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& _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 } │ │ │ │ │ +8#include │ │ │ │ │ +9#include │ │ │ │ │ +10#include │ │ │ │ │ +11#include │ │ │ │ │ +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 { │ │ │ │ │ +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 │ │ │ │ │ -_8_0 unsigned int _o_r_d_e_r () const │ │ │ │ │ -81 { │ │ │ │ │ -82 return 0; │ │ │ │ │ -83 } │ │ │ │ │ -84 }; │ │ │ │ │ -85 │ │ │ │ │ -86} │ │ │ │ │ -87 │ │ │ │ │ -88#endif │ │ │ │ │ +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_:_:_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_:_:_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/a00143.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: p0localinterpolation.hh File Reference │ │ │ │ +dune-localfunctions: localfiniteelementvariant.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -65,32 +65,41 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ Classes | │ │ │ │ Namespaces
│ │ │ │ -
p0localinterpolation.hh File Reference
│ │ │ │ +
localfiniteelementvariant.hh File Reference
│ │ │ │
│ │ │ │
│ │ │ │ -
#include <vector>
│ │ │ │ -#include <dune/geometry/referenceelements.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::P0LocalInterpolation< LB >
class  Dune::LocalFiniteElementVariant< Implementations >
 Type erasure class for wrapping LocalFiniteElement classes. More...
 
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ Namespaces

namespace  Dune
 
│ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,21 +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 │ │ │ │ │ - * _p_0 │ │ │ │ │ + * _c_o_m_m_o_n │ │ │ │ │ _C_l_a_s_s_e_s | _N_a_m_e_s_p_a_c_e_s │ │ │ │ │ -p0localinterpolation.hh File Reference │ │ │ │ │ -#include │ │ │ │ │ -#include │ │ │ │ │ +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_:_:_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_:_:_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/a00143_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: p0localinterpolation.hh Source File │ │ │ │ +dune-localfunctions: localfiniteelementvariant.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -70,72 +70,387 @@ │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
p0localinterpolation.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_P0LOCALINTERPOLATION_HH
│ │ │ │ -
6#define DUNE_P0LOCALINTERPOLATION_HH
│ │ │ │ +
5#ifndef DUNE_LOCALFUNCTIONS_COMMON_LOCALFINITEELEMENTVARIANT_HH
│ │ │ │ +
6#define DUNE_LOCALFUNCTIONS_COMMON_LOCALFINITEELEMENTVARIANT_HH
│ │ │ │
7
│ │ │ │ -
8#include <vector>
│ │ │ │ -
9#include <dune/geometry/referenceelements.hh>
│ │ │ │ -
10
│ │ │ │ +
8#include <cstddef>
│ │ │ │ +
9#include <type_traits>
│ │ │ │ +
10#include <variant>
│ │ │ │
11
│ │ │ │ -
12namespace Dune
│ │ │ │ -
13{
│ │ │ │ -
14
│ │ │ │ -
18 template<class LB>
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
20 {
│ │ │ │ -
21 public:
│ │ │ │ -
│ │ │ │ -
22 P0LocalInterpolation (const GeometryType& gt) : gt_(gt)
│ │ │ │ -
23 {}
│ │ │ │ -
│ │ │ │ +
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
│ │ │ │ -
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 }
│ │ │ │ -
│ │ │ │ +
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 private:
│ │ │ │ -
40 GeometryType gt_;
│ │ │ │ -
41 };
│ │ │ │ -
│ │ │ │ +
39 template<class... Implementations>
│ │ │ │ +
40 class LocalBasisVariant
│ │ │ │ +
41 {
│ │ │ │
42
│ │ │ │ -
43}
│ │ │ │ -
44
│ │ │ │ -
45#endif
│ │ │ │ +
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
│ │ │ │ -
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
│ │ │ │ +
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,65 +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 │ │ │ │ │ - * _l_a_g_r_a_n_g_e │ │ │ │ │ - * _p_0 │ │ │ │ │ -p0localinterpolation.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_P0LOCALINTERPOLATION_HH │ │ │ │ │ -6#define DUNE_P0LOCALINTERPOLATION_HH │ │ │ │ │ +5#ifndef DUNE_LOCALFUNCTIONS_COMMON_LOCALFINITEELEMENTVARIANT_HH │ │ │ │ │ +6#define DUNE_LOCALFUNCTIONS_COMMON_LOCALFINITEELEMENTVARIANT_HH │ │ │ │ │ 7 │ │ │ │ │ -8#include │ │ │ │ │ -9#include │ │ │ │ │ -10 │ │ │ │ │ +8#include │ │ │ │ │ +9#include │ │ │ │ │ +10#include │ │ │ │ │ 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 {} │ │ │ │ │ +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 │ │ │ │ │ -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); │ │ │ │ │ +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 private: │ │ │ │ │ -40 GeometryType gt_; │ │ │ │ │ -41 }; │ │ │ │ │ +39 template │ │ │ │ │ +40 class LocalBasisVariant │ │ │ │ │ +41 { │ │ │ │ │ 42 │ │ │ │ │ -43} │ │ │ │ │ -44 │ │ │ │ │ -45#endif │ │ │ │ │ +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_k_e_y_._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_:_:_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_:_:_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/a00146.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: cache.hh File Reference │ │ │ │ +dune-localfunctions: virtualwrappers.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -65,49 +65,48 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ Classes | │ │ │ │ Namespaces
│ │ │ │ -
cache.hh File Reference
│ │ │ │ +
virtualwrappers.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 <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::DynamicLagrangeLocalFiniteElementCache< Domain, Range, dim >
 A cache that stores Lagrange finite elements for the given dimension and order. More...
struct  Dune::LocalFiniteElementCloneFactoryHelper< Imp, IsInterface >
 
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::LocalFiniteElementCloneFactory< Imp >
 
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::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...
 
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ Namespaces

namespace  Dune
 
│ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,43 +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 │ │ │ │ │ - * _l_a_g_r_a_n_g_e │ │ │ │ │ + * _c_o_m_m_o_n │ │ │ │ │ _C_l_a_s_s_e_s | _N_a_m_e_s_p_a_c_e_s │ │ │ │ │ -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> │ │ │ │ │ +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_:_:_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_._._. │ │ │ │ │ +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_._._. │ │ │ │ │   │ │ │ │ │ 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: cache.hh Source File │ │ │ │ +dune-localfunctions: virtualwrappers.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -70,146 +70,410 @@ │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
cache.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_LOCALFUNCTIONS_LAGRANGE_CACHE_HH
│ │ │ │ -
6#define DUNE_LOCALFUNCTIONS_LAGRANGE_CACHE_HH
│ │ │ │ +
5#ifndef DUNE_LOCALFUNCTIONS_COMMON_VIRTUALWRAPPERS_HH
│ │ │ │ +
6#define DUNE_LOCALFUNCTIONS_COMMON_VIRTUALWRAPPERS_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>
│ │ │ │ -
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};
│ │ │ │ -
│ │ │ │ +
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 // -----------------------------------------------------------------
│ │ │ │ +
63
│ │ │ │ +
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> > > >;
│ │ │ │ +
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 explicit StaticLagrangeLocalFiniteElementCache (std::integral_constant<std::size_t,order> = {})
│ │ │ │ -
97 {
│ │ │ │ -
98 lfe_.emplace();
│ │ │ │ -
99 }
│ │ │ │ +
96 unsigned int order () const
│ │ │ │ +
97 {
│ │ │ │ +
98 return impl_.order();
│ │ │ │ +
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
│ │ │ │ +
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
│ │ │ │ -
138#endif // DUNE_LOCALFUNCTIONS_LAGRANGE_CACHE_HH
│ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ -
Convenience header that includes all implementations of Lagrange finite elements.
│ │ │ │ +
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
│ │ │ │ + │ │ │ │ + │ │ │ │
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
│ │ │ │ +
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
│ │ │ │ + │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,167 +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 │ │ │ │ │ - * _l_a_g_r_a_n_g_e │ │ │ │ │ -cache.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_LOCALFUNCTIONS_LAGRANGE_CACHE_HH │ │ │ │ │ -6#define DUNE_LOCALFUNCTIONS_LAGRANGE_CACHE_HH │ │ │ │ │ +5#ifndef DUNE_LOCALFUNCTIONS_COMMON_VIRTUALWRAPPERS_HH │ │ │ │ │ +6#define DUNE_LOCALFUNCTIONS_COMMON_VIRTUALWRAPPERS_HH │ │ │ │ │ 7 │ │ │ │ │ -8#include │ │ │ │ │ -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_/_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}; │ │ │ │ │ +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 // ----------------------------------------------------------------- │ │ │ │ │ +63 │ │ │ │ │ +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> > > >; │ │ │ │ │ +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 } │ │ │ │ │ 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 = {}) │ │ │ │ │ +_9_6 unsigned int _o_r_d_e_r () const │ │ │ │ │ 97 { │ │ │ │ │ -98 lfe_.emplace(); │ │ │ │ │ +98 return _i_m_p_l__.order(); │ │ │ │ │ 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 │ │ │ │ │ +_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 │ │ │ │ │ -138#endif // DUNE_LOCALFUNCTIONS_LAGRANGE_CACHE_HH │ │ │ │ │ -_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_a_g_r_a_n_g_e_p_y_r_a_m_i_d_._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_r_i_s_m_._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_._h_h │ │ │ │ │ -Convenience header that includes all implementations of Lagrange finite │ │ │ │ │ -elements. │ │ │ │ │ +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 │ │ │ │ │ _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_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 │ │ │ │ │ +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 │ │ │ │ │ +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 │ │ │ │ │ +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 │ │ │ │ │ =============================================================================== │ │ │ │ │ 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: pk1d.hh File Reference │ │ │ │ +dune-localfunctions: localfiniteelementtraits.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -65,41 +65,31 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ Classes | │ │ │ │ Namespaces
│ │ │ │ -
pk1d.hh File Reference
│ │ │ │ +
localfiniteelementtraits.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::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...
struct  Dune::LocalFiniteElementTraits< LB, LC, LI >
 traits helper struct More...
 
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ Namespaces

namespace  Dune
 
│ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,29 +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 │ │ │ │ │ - * _l_a_g_r_a_n_g_e │ │ │ │ │ + * _c_o_m_m_o_n │ │ │ │ │ _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> │ │ │ │ │ +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 │ │ │ │ │ - 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_._._. │ │ │ │ │ +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/a00149_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: pk1d.hh Source File │ │ │ │ +dune-localfunctions: localfiniteelementtraits.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -70,144 +70,50 @@ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
pk1d.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_PK1DLOCALFINITEELEMENT_HH
│ │ │ │ -
6#define DUNE_PK1DLOCALFINITEELEMENT_HH
│ │ │ │ +
5#ifndef DUNE_LOCALFINITEELEMENTTRAITS_HH
│ │ │ │ +
6#define DUNE_LOCALFINITEELEMENTTRAITS_HH
│ │ │ │
7
│ │ │ │ -
8#include <cstddef>
│ │ │ │ +
8namespace Dune {
│ │ │ │
9
│ │ │ │ -
10#include <dune/geometry/type.hh>
│ │ │ │ -
11
│ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ -
15
│ │ │ │ -
16namespace Dune
│ │ │ │ -
17{
│ │ │ │ -
18
│ │ │ │ -
19
│ │ │ │ +
11 template<class LB, class LC, class LI>
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
13 {
│ │ │ │ +
16 typedef LB LocalBasisType;
│ │ │ │ +
17
│ │ │ │ + │ │ │ │
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
│ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ + │ │ │ │ +
25 };
│ │ │ │ +
│ │ │ │ +
26
│ │ │ │ +
27}
│ │ │ │ +
28
│ │ │ │ +
29#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 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
│ │ │ │ +
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,158 +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 │ │ │ │ │ - * _l_a_g_r_a_n_g_e │ │ │ │ │ -pk1d.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_PK1DLOCALFINITEELEMENT_HH │ │ │ │ │ -6#define DUNE_PK1DLOCALFINITEELEMENT_HH │ │ │ │ │ +5#ifndef DUNE_LOCALFINITEELEMENTTRAITS_HH │ │ │ │ │ +6#define DUNE_LOCALFINITEELEMENTTRAITS_HH │ │ │ │ │ 7 │ │ │ │ │ -8#include │ │ │ │ │ +8namespace _D_u_n_e { │ │ │ │ │ 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 │ │ │ │ │ +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 │ │ │ │ │ -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 │ │ │ │ │ -_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 │ │ │ │ │ +_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_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_:_:_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/a00152.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: pk2d.hh File Reference │ │ │ │ +dune-localfunctions: virtualinterface.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -65,41 +65,51 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ Classes | │ │ │ │ Namespaces
│ │ │ │ -
pk2d.hh File Reference
│ │ │ │ +
virtualinterface.hh File Reference
│ │ │ │
│ │ │ │
│ │ │ │ -
#include <cstddef>
│ │ │ │ +
#include <type_traits>
│ │ │ │ +#include <array>
│ │ │ │ +#include <vector>
│ │ │ │ +#include <functional>
│ │ │ │ #include <dune/geometry/type.hh>
│ │ │ │ -#include <dune/localfunctions/common/localfiniteelementtraits.hh>
│ │ │ │ -#include <dune/localfunctions/common/localtoglobaladaptors.hh>
│ │ │ │ -#include <dune/localfunctions/lagrange/lagrangesimplex.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::Pk2DFiniteElement< Geometry, RF, k >
 Langrange finite element of arbitrary order on triangles. More...
class  Dune::LocalBasisVirtualInterface< T >
 virtual base class for a local basis More...
 
struct  Dune::Pk2DFiniteElement< Geometry, RF, k >::Traits
class  Dune::LocalInterpolationVirtualInterfaceBase< DomainType, RangeType >
 virtual base class for a local interpolation More...
 
struct  Dune::Pk2DFiniteElementFactory< Geometry, RF, k >
 Factory for Pk2DFiniteElement objects. 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...
 
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ Namespaces

namespace  Dune
 
│ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,29 +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 │ │ │ │ │ - * _l_a_g_r_a_n_g_e │ │ │ │ │ + * _c_o_m_m_o_n │ │ │ │ │ _C_l_a_s_s_e_s | _N_a_m_e_s_p_a_c_e_s │ │ │ │ │ -pk2d.hh File Reference │ │ │ │ │ -#include │ │ │ │ │ +virtualinterface.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_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 <_d_u_n_e_/_l_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_:_:_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_._._. │ │ │ │ │ +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_:_:_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 │ │ │ │ │ +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_:_:_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_._._. │ │ │ │ │ +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_._._. │ │ │ │ │   │ │ │ │ │ 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: pk2d.hh Source File │ │ │ │ +dune-localfunctions: virtualinterface.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -70,144 +70,244 @@ │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
pk2d.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#ifndef DUNE_PK2DLOCALFINITEELEMENT_HH
│ │ │ │ -
6#define DUNE_PK2DLOCALFINITEELEMENT_HH
│ │ │ │ +
5#ifndef DUNE_LOCALFUNCTIONS_COMMON_VIRTUALINTERFACE_HH
│ │ │ │ +
6#define DUNE_LOCALFUNCTIONS_COMMON_VIRTUALINTERFACE_HH
│ │ │ │
7
│ │ │ │ -
8#include <cstddef>
│ │ │ │ -
9
│ │ │ │ -
10#include <dune/geometry/type.hh>
│ │ │ │ -
11
│ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ -
15
│ │ │ │ -
16namespace Dune
│ │ │ │ -
17{
│ │ │ │ +
8#include <type_traits>
│ │ │ │ +
9#include <array>
│ │ │ │ +
10#include <vector>
│ │ │ │ +
11#include <functional>
│ │ │ │ +
12
│ │ │ │ +
13#include <dune/geometry/type.hh>
│ │ │ │ +
14
│ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │
18
│ │ │ │ -
19
│ │ │ │ +
19namespace Dune
│ │ │ │ +
20{
│ │ │ │
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 };
│ │ │ │ -
│ │ │ │ +
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
│ │ │ │ -
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}
│ │ │ │ +
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
│ │ │ │ -
136#endif
│ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ +
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
│ │ │ │ + │ │ │ │ + │ │ │ │
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
│ │ │ │ +
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,158 +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 │ │ │ │ │ - * _l_a_g_r_a_n_g_e │ │ │ │ │ -pk2d.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#ifndef DUNE_PK2DLOCALFINITEELEMENT_HH │ │ │ │ │ -6#define DUNE_PK2DLOCALFINITEELEMENT_HH │ │ │ │ │ +5#ifndef DUNE_LOCALFUNCTIONS_COMMON_VIRTUALINTERFACE_HH │ │ │ │ │ +6#define DUNE_LOCALFUNCTIONS_COMMON_VIRTUALINTERFACE_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{ │ │ │ │ │ +8#include │ │ │ │ │ +9#include │ │ │ │ │ +10#include │ │ │ │ │ +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 │ │ │ │ │ -19 │ │ │ │ │ +19namespace _D_u_n_e │ │ │ │ │ +20{ │ │ │ │ │ 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 }; │ │ │ │ │ +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 │ │ │ │ │ -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} │ │ │ │ │ +_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 │ │ │ │ │ -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 │ │ │ │ │ +_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_k_e_y_._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_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 │ │ │ │ │ +_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/a00155.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: p0.hh File Reference │ │ │ │ +dune-localfunctions: localtoglobaladaptors.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -65,36 +65,51 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ Classes | │ │ │ │ Namespaces
│ │ │ │ -
p0.hh File Reference
│ │ │ │ +
localtoglobaladaptors.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 <cstddef>
│ │ │ │ +#include <vector>
│ │ │ │ +#include <dune/common/fmatrix.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::P0LocalFiniteElement< D, R, d >
 The local p0 finite element on all types of reference elements. More...
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...
 
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ Namespaces

namespace  Dune
 
│ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,24 +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 │ │ │ │ │ - * _l_a_g_r_a_n_g_e │ │ │ │ │ + * _c_o_m_m_o_n │ │ │ │ │ _C_l_a_s_s_e_s | _N_a_m_e_s_p_a_c_e_s │ │ │ │ │ -p0.hh File Reference │ │ │ │ │ +localtoglobaladaptors.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 "_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_:_:_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_:_:_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_._._. │ │ │ │ │   │ │ │ │ │ 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/a00155_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: p0.hh Source File │ │ │ │ +dune-localfunctions: localtoglobaladaptors.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -70,118 +70,270 @@ │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
p0.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_P0LOCALFINITEELEMENT_HH
│ │ │ │ -
6#define DUNE_P0LOCALFINITEELEMENT_HH
│ │ │ │ -
7
│ │ │ │ -
8#include <dune/geometry/type.hh>
│ │ │ │ -
9
│ │ │ │ - │ │ │ │ -
11#include "p0/p0localbasis.hh"
│ │ │ │ - │ │ │ │ - │ │ │ │ -
14
│ │ │ │ -
15namespace Dune
│ │ │ │ -
16{
│ │ │ │ +
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
│ │ │ │ -
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 };
│ │ │ │ -
│ │ │ │ +
18namespace Dune {
│ │ │ │ +
19
│ │ │ │ +
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}
│ │ │ │ -
80
│ │ │ │ -
81#endif
│ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ +
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;
│ │ │ │ +
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
│ │ │ │
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
│ │ │ │ +
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,125 +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 │ │ │ │ │ - * _l_a_g_r_a_n_g_e │ │ │ │ │ -p0.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_P0LOCALFINITEELEMENT_HH │ │ │ │ │ -6#define DUNE_P0LOCALFINITEELEMENT_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 "_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{ │ │ │ │ │ +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 │ │ │ │ │ -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 }; │ │ │ │ │ +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} │ │ │ │ │ -80 │ │ │ │ │ -81#endif │ │ │ │ │ -_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 │ │ │ │ │ -_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 │ │ │ │ │ +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; │ │ │ │ │ +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 │ │ │ │ │ _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 │ │ │ │ │ -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 │ │ │ │ │ +_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 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 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/a00161.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: lagrangepyramid.hh File Reference │ │ │ │ +dune-localfunctions: interfaceswitch.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -65,40 +65,40 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ Classes | │ │ │ │ Namespaces
│ │ │ │ -
lagrangepyramid.hh File Reference
│ │ │ │ +
interfaceswitch.hh File Reference
│ │ │ │
│ │ │ │
│ │ │ │ -
#include <array>
│ │ │ │ -#include <numeric>
│ │ │ │ +
#include <cstddef>
│ │ │ │ +#include <memory>
│ │ │ │ +#include <vector>
│ │ │ │ #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 <dune/common/typetraits.hh>
│ │ │ │ +#include <dune/common/shared_ptr.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::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...
 
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ Namespaces

namespace  Dune
 
│ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,29 +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_o_m_m_o_n │ │ │ │ │ _C_l_a_s_s_e_s | _N_a_m_e_s_p_a_c_e_s │ │ │ │ │ -lagrangepyramid.hh File Reference │ │ │ │ │ -#include │ │ │ │ │ -#include │ │ │ │ │ +interfaceswitch.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> │ │ │ │ │ +#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_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_:_:_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 │ │ │ │ │   │ │ │ │ │ =============================================================================== │ │ │ │ │ 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: lagrangepyramid.hh Source File │ │ │ │ +dune-localfunctions: interfaceswitch.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -70,824 +70,198 @@ │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
lagrangepyramid.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_LOCALFUNCTIONS_LAGRANGE_LAGRANGEPYRAMID_HH
│ │ │ │ -
6#define DUNE_LOCALFUNCTIONS_LAGRANGE_LAGRANGEPYRAMID_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>
│ │ │ │ +
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
│ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ -
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> >;
│ │ │ │ +
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
│ │ │ │ -
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 }
│ │ │ │ +
│ │ │ │ +
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 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);
│ │ │ │ +
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
│ │ │ │ -
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 }
│ │ │ │ +
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
│ │ │ │ -
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 }
│ │ │ │ +
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
│ │ │ │ -
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
│ │ │ │ - │ │ │ │ - │ │ │ │ +
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
│ │ │ │ -
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
│ │ │ │ - │ │ │ │ +
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,861 +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 │ │ │ │ │ - * _l_a_g_r_a_n_g_e │ │ │ │ │ -lagrangepyramid.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_LOCALFUNCTIONS_LAGRANGE_LAGRANGEPYRAMID_HH │ │ │ │ │ -6#define DUNE_LOCALFUNCTIONS_LAGRANGE_LAGRANGEPYRAMID_HH │ │ │ │ │ -7 │ │ │ │ │ -8#include │ │ │ │ │ -9#include │ │ │ │ │ -10 │ │ │ │ │ -11#include │ │ │ │ │ -12#include │ │ │ │ │ -13#include │ │ │ │ │ -14 │ │ │ │ │ -15#include │ │ │ │ │ +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 │ │ │ │ │ -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 │ │ │ │ │ ->; │ │ │ │ │ +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 │ │ │ │ │ -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 } │ │ │ │ │ +_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 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); │ │ │ │ │ +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 │ │ │ │ │ -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 } │ │ │ │ │ +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 │ │ │ │ │ -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 } │ │ │ │ │ +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 │ │ │ │ │ -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_k_e_y_._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 │ │ │ │ │ +_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_:_:_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_:_:_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/a00167.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: pqkfactory.hh File Reference │ │ │ │ +dune-localfunctions: interface.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -65,49 +65,54 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ Classes | │ │ │ │ Namespaces
│ │ │ │ -
pqkfactory.hh File Reference
│ │ │ │ +
interface.hh File Reference
│ │ │ │
│ │ │ │
│ │ │ │ -
#include <map>
│ │ │ │ +
#include <array>
│ │ │ │ +#include <cstddef>
│ │ │ │ +#include <vector>
│ │ │ │ #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>
│ │ │ │ +#include <dune/localfunctions/common/localkey.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...
class  Dune::FiniteElementInterface
 Interface for global-valued finite elements. More...
 
struct  Dune::DimSpecificPQkLocalFiniteElementFactory< D, R, 3, k >
 Factory that only creates dimension specific local finite elements. More...
struct  Dune::FiniteElementInterface::Traits
 types of component objects 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::FiniteElementFactoryInterface< Geometry, VertexOrder >
 Factory interface for global-valued finite elements. 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...
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,41 +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 │ │ │ │ │ - * _l_a_g_r_a_n_g_e │ │ │ │ │ + * _c_o_m_m_o_n │ │ │ │ │ _C_l_a_s_s_e_s | _N_a_m_e_s_p_a_c_e_s │ │ │ │ │ -pqkfactory.hh File Reference │ │ │ │ │ -#include │ │ │ │ │ +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_/_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 <_d_u_n_e_/_l_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_:_:_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_._._. │ │ │ │ │ + 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_._._. │ │ │ │ │   │ │ │ │ │ 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: pqkfactory.hh Source File │ │ │ │ +dune-localfunctions: interface.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -70,217 +70,215 @@ │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
pqkfactory.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_LOCALFUNCTIONS_LAGRANGE_PQKFACTORY_HH
│ │ │ │ -
6#define DUNE_LOCALFUNCTIONS_LAGRANGE_PQKFACTORY_HH
│ │ │ │ -
7
│ │ │ │ -
8#include <map>
│ │ │ │ -
9
│ │ │ │ -
10#include <dune/geometry/type.hh>
│ │ │ │ -
11
│ │ │ │ - │ │ │ │ - │ │ │ │ -
14
│ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ -
20
│ │ │ │ -
21namespace Dune
│ │ │ │ -
22{
│ │ │ │ +
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
│ │ │ │ +
17
│ │ │ │ +
18#include <dune/geometry/type.hh>
│ │ │ │ +
19
│ │ │ │ + │ │ │ │ +
21
│ │ │ │ +
22namespace Dune {
│ │ │ │
23
│ │ │ │ -
28 template<class D, class R, int d, int k>
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
30 {
│ │ │ │ - │ │ │ │ -
32
│ │ │ │ -
│ │ │ │ -
34 static LocalFiniteElementVirtualInterface<T>* create(const GeometryType&)
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
26 {
│ │ │ │ +
27 struct ImplementationDefined;
│ │ │ │ +
28
│ │ │ │ +
29 public:
│ │ │ │ +
31
│ │ │ │ +
│ │ │ │ +
34 struct Traits
│ │ │ │
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_;
│ │ │ │ +
37
│ │ │ │ +
42 typedef ImplementationDefined Basis;
│ │ │ │ +
44
│ │ │ │ +
49 typedef ImplementationDefined Coefficients;
│ │ │ │ +
51
│ │ │ │ +
56 typedef ImplementationDefined Interpolation;
│ │ │ │ +
57 };
│ │ │ │ +
│ │ │ │ +
58
│ │ │ │ +
60
│ │ │ │ + │ │ │ │ + │ │ │ │ +
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
│ │ │ │ -
163 };
│ │ │ │ -
│ │ │ │ -
164
│ │ │ │ -
165}
│ │ │ │ -
166
│ │ │ │ -
167#endif
│ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ +
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
│ │ │ │ -
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
│ │ │ │ +
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,266 +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 │ │ │ │ │ - * _l_a_g_r_a_n_g_e │ │ │ │ │ -pqkfactory.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_LOCALFUNCTIONS_LAGRANGE_PQKFACTORY_HH │ │ │ │ │ -6#define DUNE_LOCALFUNCTIONS_LAGRANGE_PQKFACTORY_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_/_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{ │ │ │ │ │ +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 │ │ │ │ │ +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 │ │ │ │ │ -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&) │ │ │ │ │ +_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 { │ │ │ │ │ -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__; │ │ │ │ │ +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&); │ │ │ │ │ +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 │ │ │ │ │ -163 }; │ │ │ │ │ -164 │ │ │ │ │ -165} │ │ │ │ │ -166 │ │ │ │ │ -167#endif │ │ │ │ │ -_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_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_p_r_i_s_m_._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 │ │ │ │ │ +_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_:_:_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 │ │ │ │ │ +_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/a00170.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: lagrangebasis.hh File Reference │ │ │ │ +dune-localfunctions: hierarchicalprismp2localbasis.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -65,42 +65,46 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ Classes | │ │ │ │ Namespaces
│ │ │ │ -
lagrangebasis.hh File Reference
│ │ │ │ +
hierarchicalprismp2localbasis.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>
│ │ │ │ + │ │ │ │ +

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

struct  Dune::LagrangeBasisFactory< LP, dim, SF, CF >
class  Dune::HierarchicalPrismP2LocalBasis< D, R >
 
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ Namespaces

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

Detailed Description

│ │ │ │ +

Hierarchical prism p2 shape functions for the simplex.

│ │ │ │ +
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── 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 │ │ │ │ │ + * _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 │ │ │ │ │ -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> │ │ │ │ │ +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 │ │ │ │ │ -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_:_:_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/a00170_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: lagrangebasis.hh Source File │ │ │ │ +dune-localfunctions: hierarchicalprismp2localbasis.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -70,58 +70,271 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
lagrangebasis.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#ifndef DUNE_LAGRANGEBASIS_HH
│ │ │ │ -
6#define DUNE_LAGRANGEBASIS_HH
│ │ │ │ +
5#ifndef DUNE_HIERARCHICAL_PRISM_P2_LOCALBASIS_HH
│ │ │ │ +
6#define DUNE_HIERARCHICAL_PRISM_P2_LOCALBASIS_HH
│ │ │ │
7
│ │ │ │ -
8#include <fstream>
│ │ │ │ -
9#include <dune/common/exceptions.hh>
│ │ │ │ -
10
│ │ │ │ - │ │ │ │ - │ │ │ │ +
12#include <numeric>
│ │ │ │
13
│ │ │ │ - │ │ │ │ -
15
│ │ │ │ -
16namespace Dune
│ │ │ │ -
17{
│ │ │ │ +
14#include <dune/common/fvector.hh>
│ │ │ │ +
15#include <dune/common/fmatrix.hh>
│ │ │ │ +
16
│ │ │ │ + │ │ │ │
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 {};
│ │ │ │ -
│ │ │ │ -
26
│ │ │ │ -
27}
│ │ │ │ -
28
│ │ │ │ -
29#endif // #ifndef DUNE_LAGRANGEBASIS_HH
│ │ │ │ - │ │ │ │ - │ │ │ │ +
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
│ │ │ │ -
Definition lagrangebasis.hh:25
│ │ │ │ -
Definition defaultbasisfactory.hh:38
│ │ │ │ - │ │ │ │ +
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,50 +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 │ │ │ │ │ - * _l_a_g_r_a_n_g_e │ │ │ │ │ -lagrangebasis.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#ifndef DUNE_LAGRANGEBASIS_HH │ │ │ │ │ -6#define DUNE_LAGRANGEBASIS_HH │ │ │ │ │ +5#ifndef DUNE_HIERARCHICAL_PRISM_P2_LOCALBASIS_HH │ │ │ │ │ +6#define DUNE_HIERARCHICAL_PRISM_P2_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 <_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> │ │ │ │ │ +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_/_i_n_t_e_r_p_o_l_a_t_i_o_n_._h_h> │ │ │ │ │ -15 │ │ │ │ │ -16namespace _D_u_n_e │ │ │ │ │ -17{ │ │ │ │ │ +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 │ │ │ │ │ -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 │ │ │ │ │ +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_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_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/a00173.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: lagrangecoefficients.hh File Reference │ │ │ │ +dune-localfunctions: hierarchicalprismp2localinterpolation.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -65,35 +65,31 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ Classes | │ │ │ │ Namespaces
│ │ │ │ -
lagrangecoefficients.hh File Reference
│ │ │ │ +
hierarchicalprismp2localinterpolation.hh File Reference
│ │ │ │
│ │ │ │
│ │ │ │
#include <vector>
│ │ │ │ -#include <dune/common/fvector.hh>
│ │ │ │ -#include <dune/geometry/type.hh>
│ │ │ │ -#include <dune/localfunctions/utility/field.hh>
│ │ │ │ -#include <dune/localfunctions/common/localkey.hh>
│ │ │ │
│ │ │ │

Go to the source code of this file.

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

│ │ │ │ Classes

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

│ │ │ │ Namespaces

namespace  Dune
 
│ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,23 +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 │ │ │ │ │ - * _l_a_g_r_a_n_g_e │ │ │ │ │ + * _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 │ │ │ │ │ -lagrangecoefficients.hh File Reference │ │ │ │ │ +hierarchicalprismp2localinterpolation.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> │ │ │ │ │ -#include <_d_u_n_e_/_l_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_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_ _> │ │ │ │ │ +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 │ │ │ │ │   │ │ │ │ │ =============================================================================== │ │ │ │ │ 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: lagrangecoefficients.hh Source File │ │ │ │ +dune-localfunctions: hierarchicalprismp2localinterpolation.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -70,81 +70,104 @@ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
lagrangecoefficients.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_LAGRANGECOEFFICIENTS_HH
│ │ │ │ -
6#define DUNE_LAGRANGECOEFFICIENTS_HH
│ │ │ │ +
5#ifndef DUNE_HIERARCHICAL_PRISM_P2_LOCALINTERPOLATION_HH
│ │ │ │ +
6#define DUNE_HIERARCHICAL_PRISM_P2_LOCALINTERPOLATION_HH
│ │ │ │
7
│ │ │ │
8#include <vector>
│ │ │ │
9
│ │ │ │ -
10#include <dune/common/fvector.hh>
│ │ │ │ -
11
│ │ │ │ -
12#include <dune/geometry/type.hh>
│ │ │ │ -
13
│ │ │ │ - │ │ │ │ - │ │ │ │ -
16
│ │ │ │ -
17namespace Dune
│ │ │ │ -
18{
│ │ │ │ +
10namespace Dune
│ │ │ │ +
11{
│ │ │ │ +
15 template<class LB>
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
17 {
│ │ │ │ +
18 public:
│ │ │ │
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}
│ │ │ │ -
46
│ │ │ │ -
47#endif // DUNE_LAGRANGECOEFFICIENTS_HH
│ │ │ │ - │ │ │ │ - │ │ │ │ +
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]);
│ │ │ │ +
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
│ │ │ │ -
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
│ │ │ │ +
Definition hierarchicalprismp2localinterpolation.hh:17
│ │ │ │ +
void interpolate(const F &f, std::vector< C > &out) const
Definition hierarchicalprismp2localinterpolation.hh:21
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,80 +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 │ │ │ │ │ - * _l_a_g_r_a_n_g_e │ │ │ │ │ -lagrangecoefficients.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_LAGRANGECOEFFICIENTS_HH │ │ │ │ │ -6#define DUNE_LAGRANGECOEFFICIENTS_HH │ │ │ │ │ +5#ifndef DUNE_HIERARCHICAL_PRISM_P2_LOCALINTERPOLATION_HH │ │ │ │ │ +6#define DUNE_HIERARCHICAL_PRISM_P2_LOCALINTERPOLATION_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{ │ │ │ │ │ +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< 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} │ │ │ │ │ -46 │ │ │ │ │ -47#endif // DUNE_LAGRANGECOEFFICIENTS_HH │ │ │ │ │ -_f_i_e_l_d_._h_h │ │ │ │ │ -_l_o_c_a_l_k_e_y_._h_h │ │ │ │ │ +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]); │ │ │ │ │ +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_:_:_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 │ │ │ │ │ +_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/a00176.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: lagrangeprism.hh File Reference │ │ │ │ +dune-localfunctions: hierarchicalp2withelementbubble.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -65,40 +65,34 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ Classes | │ │ │ │ Namespaces
│ │ │ │ -
lagrangeprism.hh File Reference
│ │ │ │ +
hierarchicalp2withelementbubble.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 <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::LagrangePrismLocalFiniteElement< D, R, k >
 Lagrange finite element for 3d prisms with arbitrary compile-time polynomial order. More...
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,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 │ │ │ │ │ - * _l_a_g_r_a_n_g_e │ │ │ │ │ + * _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 │ │ │ │ │ -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> │ │ │ │ │ +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_/_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_/_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_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_:_:_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/a00176_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: lagrangeprism.hh Source File │ │ │ │ +dune-localfunctions: hierarchicalp2withelementbubble.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -70,688 +70,112 @@ │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
lagrangeprism.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_LAGRANGE_LAGRANGEPRISM_HH
│ │ │ │ -
6#define DUNE_LOCALFUNCTIONS_LAGRANGE_LAGRANGEPRISM_HH
│ │ │ │ +
5#ifndef DUNE_HIERARCHICAL_P2_WITH_ELEMENTBUBBLE_LOCALFINITEELEMENT_HH
│ │ │ │ +
6#define DUNE_HIERARCHICAL_P2_WITH_ELEMENTBUBBLE_LOCALFINITEELEMENT_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{
│ │ │ │ -
32 template<class D, class R, unsigned int k>
│ │ │ │ -
33 class LagrangePrismLocalBasis
│ │ │ │ +
8#include <dune/geometry/type.hh>
│ │ │ │ +
9
│ │ │ │ + │ │ │ │ + │ │ │ │ +
12
│ │ │ │ +
13
│ │ │ │ +
14namespace Dune
│ │ │ │ +
15{
│ │ │ │ +
32 template<class D, class R, int dim>
│ │ │ │ +
│ │ │ │ + │ │ │ │
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> >;
│ │ │ │ +
35 public:
│ │ │ │ + │ │ │ │
38
│ │ │ │ -
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
│ │ │ │ - │ │ │ │ - │ │ │ │ + │ │ │ │ +
41
│ │ │ │ + │ │ │ │ +
44
│ │ │ │ + │ │ │ │ +
47
│ │ │ │ +
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
│ │ │ │ -
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
│ │ │ │ - │ │ │ │ +
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,712 +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 │ │ │ │ │ - * _l_a_g_r_a_n_g_e │ │ │ │ │ -lagrangeprism.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_LAGRANGE_LAGRANGEPRISM_HH │ │ │ │ │ -6#define DUNE_LOCALFUNCTIONS_LAGRANGE_LAGRANGEPRISM_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 │ │ │ │ │ -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 │ │ │ │ │ +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 │ │ │ │ │ +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 static constexpr std::size_t dim = 3; │ │ │ │ │ -36 public: │ │ │ │ │ -37 using Traits = │ │ │ │ │ -LocalBasisTraits,R,1,FieldVector,FieldMatrix │ │ │ │ │ ->; │ │ │ │ │ +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 │ │ │ │ │ -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 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_k_e_y_._h_h │ │ │ │ │ +_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 │ │ │ │ │ +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 │ │ │ │ │ _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 │ │ │ │ │ +_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. │ │ │ │ │ _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 │ │ │ │ │ +_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 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 │ │ │ │ │ +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 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 │ │ │ │ │ +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/a00179.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: q1.hh File Reference │ │ │ │ +dune-localfunctions: hierarchicalp1withelementbubble.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -65,41 +65,39 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ -Classes | │ │ │ │ -Namespaces
│ │ │ │ -
q1.hh File Reference
│ │ │ │ +Namespaces | │ │ │ │ +Typedefs
│ │ │ │ +
hierarchicalp1withelementbubble.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>
│ │ │ │ + │ │ │ │

Go to the source code of this file.

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

│ │ │ │ -Classes

class  Dune::Q1FiniteElementFactory< Geometry, RF >
 Factory for global-valued Q1 elements. 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,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 │ │ │ │ │ - * _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 │ │ │ │ │ -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> │ │ │ │ │ + * _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_:_:_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 │ │ │ │ │   │ │ │ │ │ +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/a00179_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: q1.hh Source File │ │ │ │ +dune-localfunctions: hierarchicalp1withelementbubble.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -70,75 +70,41 @@ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
q1.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
│ │ │ │ -
6#ifndef DUNE_Q1_LOCALFINITEELEMENT_HH
│ │ │ │ -
7#define DUNE_Q1_LOCALFINITEELEMENT_HH
│ │ │ │ -
8
│ │ │ │ -
9#include <dune/geometry/type.hh>
│ │ │ │ -
10
│ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ -
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
│ │ │ │ -
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
│ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ +
5#ifndef DUNE_HIERARCHICAL_P1_WITH_ELEMENTBUBBLE_LOCALFINITEELEMENT_HH
│ │ │ │ +
6#define DUNE_HIERARCHICAL_P1_WITH_ELEMENTBUBBLE_LOCALFINITEELEMENT_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
│ │ │ │ + │ │ │ │
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
│ │ │ │ +
Linear Lagrange functions enriched with an element bubble function.
Definition simplexp1bubble.hh:45
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,75 +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 │ │ │ │ │ -q1.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 │ │ │ │ │ -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> │ │ │ │ │ -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 │ │ │ │ │ -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 │ │ │ │ │ +5#ifndef DUNE_HIERARCHICAL_P1_WITH_ELEMENTBUBBLE_LOCALFINITEELEMENT_HH │ │ │ │ │ +6#define DUNE_HIERARCHICAL_P1_WITH_ELEMENTBUBBLE_LOCALFINITEELEMENT_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 │ │ │ │ │ _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_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 │ │ │ │ │ +_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/a00182.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: pq22d.hh File Reference │ │ │ │ +dune-localfunctions: hierarchicalprismp2.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -65,34 +65,35 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ Classes | │ │ │ │ Namespaces
│ │ │ │ -
pq22d.hh File Reference
│ │ │ │ +
hierarchicalprismp2.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 <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::PQ22DLocalFiniteElement< D, R >
class  Dune::HierarchicalPrismP2LocalFiniteElement< D, R >
 
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ 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 │ │ │ │ │ - * _l_a_g_r_a_n_g_e │ │ │ │ │ + * _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 │ │ │ │ │ -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> │ │ │ │ │ +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_:_:_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_:_:_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 │ │ │ │ │   │ │ │ │ │ =============================================================================== │ │ │ │ │ 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: pq22d.hh Source File │ │ │ │ +dune-localfunctions: hierarchicalprismp2.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -70,132 +70,122 @@ │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
pq22d.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_PQ22DLOCALFINITEELEMENT_HH
│ │ │ │ -
6#define DUNE_PQ22DLOCALFINITEELEMENT_HH
│ │ │ │ +
5#ifndef DUNE_HIERARCHICAL_PRISM_P2_LOCALFINITEELEMENT_HH
│ │ │ │ +
6#define DUNE_HIERARCHICAL_PRISM_P2_LOCALFINITEELEMENT_HH
│ │ │ │
7
│ │ │ │ -
8#include <dune/common/fmatrix.hh>
│ │ │ │ +
8#include <dune/geometry/type.hh>
│ │ │ │
9
│ │ │ │ - │ │ │ │ -
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 }
│ │ │ │ + │ │ │ │ + │ │ │ │ +
12
│ │ │ │ + │ │ │ │ + │ │ │ │ +
15
│ │ │ │ +
16
│ │ │ │ +
17namespace Dune
│ │ │ │ +
18{
│ │ │ │ +
19
│ │ │ │ +
22 template<class D, class R>
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
24 {
│ │ │ │ +
25
│ │ │ │ +
26
│ │ │ │ +
27 public:
│ │ │ │ + │ │ │ │ +
31 Impl::LagrangePrismLocalCoefficients<2>,
│ │ │ │ + │ │ │ │ +
33
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
37 {}
│ │ │ │
│ │ │ │ -
40
│ │ │ │ +
38
│ │ │ │
│ │ │ │ -
41 const typename Traits::LocalBasisType& localBasis () const
│ │ │ │ +
41 const typename Traits::LocalBasisType& localBasis () const
│ │ │ │
42 {
│ │ │ │ -
43 return lfeVariant_.localBasis();
│ │ │ │ +
43 return basis;
│ │ │ │
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 GeometryType type () const
│ │ │ │ -
63 {
│ │ │ │ -
64 return lfeVariant_.type();
│ │ │ │ -
65 }
│ │ │ │ -
│ │ │ │ -
66
│ │ │ │ -
67 private:
│ │ │ │ -
68
│ │ │ │ -
69 LFEVariant lfeVariant_;
│ │ │ │ -
70 };
│ │ │ │ -
│ │ │ │ -
71
│ │ │ │ -
72}
│ │ │ │ -
73
│ │ │ │ -
74#endif
│ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ +
│ │ │ │ + │ │ │ │ +
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
│ │ │ │ +
77 Impl::LagrangePrismLocalCoefficients<2> coefficients;
│ │ │ │ +
78
│ │ │ │ + │ │ │ │ +
80 };
│ │ │ │ +
│ │ │ │ +
81
│ │ │ │ +
82}
│ │ │ │ +
83
│ │ │ │ +
84#endif
│ │ │ │ + │ │ │ │ +
Hierarchical prism p2 shape functions for the simplex.
│ │ │ │ + │ │ │ │ + │ │ │ │
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
│ │ │ │ +
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,156 +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 │ │ │ │ │ - * _l_a_g_r_a_n_g_e │ │ │ │ │ -pq22d.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_PQ22DLOCALFINITEELEMENT_HH │ │ │ │ │ -6#define DUNE_PQ22DLOCALFINITEELEMENT_HH │ │ │ │ │ +5#ifndef DUNE_HIERARCHICAL_PRISM_P2_LOCALFINITEELEMENT_HH │ │ │ │ │ +6#define DUNE_HIERARCHICAL_PRISM_P2_LOCALFINITEELEMENT_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_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 │ │ │ │ │ +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 │ │ │ │ │ +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 lfeVariant_._l_o_c_a_l_B_a_s_i_s(); │ │ │ │ │ +43 return basis; │ │ │ │ │ 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 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} │ │ │ │ │ -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 │ │ │ │ │ +_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 │ │ │ │ │ +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 │ │ │ │ │ +_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 │ │ │ │ │ +_l_a_g_r_a_n_g_e_p_r_i_s_m_._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 │ │ │ │ │ +_D_u_n_e_:_:_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 │ │ │ │ │ -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 │ │ │ │ │ +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 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 │ │ │ │ │ +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/a00185.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: lagrangelfecache.hh File Reference │ │ │ │ +dune-localfunctions: hierarchicalp2.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -65,48 +65,41 @@ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ -Namespaces | │ │ │ │ -Typedefs
│ │ │ │ -
lagrangelfecache.hh File Reference
│ │ │ │ +Classes | │ │ │ │ +Namespaces
│ │ │ │ +
hierarchicalp2.hh File Reference
│ │ │ │ │ │ │ │
│ │ │ │ -
#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>
│ │ │ │ +
#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::HierarchicalP2LocalFiniteElement< D, R, dim >
 
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -

│ │ │ │ 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,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 │ │ │ │ │ -_N_a_m_e_s_p_a_c_e_s | _T_y_p_e_d_e_f_s │ │ │ │ │ -lagrangelfecache.hh File Reference │ │ │ │ │ -#include │ │ │ │ │ -#include │ │ │ │ │ + * _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 │ │ │ │ │ +hierarchicalp2.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_/_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_/_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 <_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 "_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_:_:_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 │ │ │ │ │   │ │ │ │ │ -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/a00185_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: lagrangelfecache.hh Source File │ │ │ │ +dune-localfunctions: hierarchicalp2.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -70,145 +70,124 @@ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
lagrangelfecache.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_LAGRANGE_LAGRANGELFECACHE_HH
│ │ │ │ -
6#define DUNE_LOCALFUNCTIONS_LAGRANGE_LAGRANGELFECACHE_HH
│ │ │ │ +
5#ifndef DUNE_HIERARCHICAL_P2_LOCALFINITEELEMENT_HH
│ │ │ │ +
6#define DUNE_HIERARCHICAL_P2_LOCALFINITEELEMENT_HH
│ │ │ │
7
│ │ │ │ -
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
│ │ │ │ +
8#include <dune/geometry/type.hh>
│ │ │ │ +
9
│ │ │ │ + │ │ │ │ + │ │ │ │ +
12
│ │ │ │ + │ │ │ │ + │ │ │ │ +
15
│ │ │ │ +
16namespace Dune
│ │ │ │ +
17{
│ │ │ │ +
18
│ │ │ │ +
21 template<class D, class R, int dim>
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
23 {
│ │ │ │
24
│ │ │ │ -
25
│ │ │ │ -
26namespace Impl {
│ │ │ │ +
25 static_assert(1 <= dim && dim <= 3,
│ │ │ │ +
26 "HierarchicalP2LocalFiniteElement only implemented for dim==1, 2, 3.");
│ │ │ │
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 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
│ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ +
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.
│ │ │ │ + │ │ │ │ + │ │ │ │
Definition bdfmcube.hh:18
│ │ │ │ -
A cache storing a compile time selection of local finite element implementations.
Definition localfiniteelementvariantcache.hh:68
│ │ │ │ +
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,164 +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 │ │ │ │ │ - * _l_a_g_r_a_n_g_e │ │ │ │ │ -lagrangelfecache.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_LAGRANGE_LAGRANGELFECACHE_HH │ │ │ │ │ -6#define DUNE_LOCALFUNCTIONS_LAGRANGE_LAGRANGELFECACHE_HH │ │ │ │ │ +5#ifndef DUNE_HIERARCHICAL_P2_LOCALFINITEELEMENT_HH │ │ │ │ │ +6#define DUNE_HIERARCHICAL_P2_LOCALFINITEELEMENT_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_/_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 │ │ │ │ │ +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 │ │ │ │ │ -26namespace Impl { │ │ │ │ │ +25 static_assert(1 <= dim && dim <= 3, │ │ │ │ │ +26 "HierarchicalP2LocalFiniteElement only implemented for dim==1, 2, 3."); │ │ │ │ │ 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 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_c_u_b_e_._h_h │ │ │ │ │ -_p_0_._h_h │ │ │ │ │ +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 │ │ │ │ │ +_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_a_g_r_a_n_g_e_p_y_r_a_m_i_d_._h_h │ │ │ │ │ -_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_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_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_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 │ │ │ │ │ =============================================================================== │ │ │ │ │ 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: q2.hh File Reference │ │ │ │ +dune-localfunctions: hierarchicalsimplexp2withelementbubble.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -65,44 +65,59 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ Classes | │ │ │ │ Namespaces
│ │ │ │ -
q2.hh File Reference
│ │ │ │ +
hierarchicalsimplexp2withelementbubble.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>
│ │ │ │ + │ │ │ │ +

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

class  Dune::Q2FiniteElementFactory< Geometry, RF >
 Factory for global-valued Q23D elements. More...
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,25 +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 │ │ │ │ │ - * _l_a_g_r_a_n_g_e │ │ │ │ │ + * _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 │ │ │ │ │ -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> │ │ │ │ │ +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 │ │ │ │ │ -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_:_:_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/a00188_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: q2.hh Source File │ │ │ │ +dune-localfunctions: hierarchicalsimplexp2withelementbubble.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -70,77 +70,340 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
q2.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_Q2_LOCALFINITEELEMENT_HH
│ │ │ │ -
6#define DUNE_Q2_LOCALFINITEELEMENT_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 <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
│ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ +
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
│ │ │ │ -
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
│ │ │ │ +
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,82 +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 │ │ │ │ │ - * _l_a_g_r_a_n_g_e │ │ │ │ │ -q2.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_Q2_LOCALFINITEELEMENT_HH │ │ │ │ │ -6#define DUNE_Q2_LOCALFINITEELEMENT_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_/_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 │ │ │ │ │ +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_:_:_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 │ │ │ │ │ +_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/a00191.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: orthonormalbasis.hh File Reference │ │ │ │ +dune-localfunctions: hierarchicalsimplexp2localbasis.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -65,42 +65,55 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ Classes | │ │ │ │ Namespaces
│ │ │ │ -
orthonormalbasis.hh File Reference
│ │ │ │ +
hierarchicalsimplexp2localbasis.hh File Reference
│ │ │ │
│ │ │ │
│ │ │ │ -
#include <sstream>
│ │ │ │ -#include <dune/localfunctions/utility/polynomialbasis.hh>
│ │ │ │ -#include <dune/localfunctions/orthonormal/orthonormalcompute.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::OrthonormalBasisFactory< dim, SF, CF >
class  Dune::HierarchicalSimplexP2LocalBasis< D, R, dim >
 
class  Dune::HierarchicalSimplexP2LocalBasis< D, R, 1 >
 Hierarchical P2 basis in 1d. More...
 
class  Dune::HierarchicalSimplexP2LocalBasis< D, R, 2 >
 Hierarchical P2 basis in 2d. More...
 
struct  Dune::OrthonormalBasisFactory< dim, SF, CF >::EvaluationBasisFactory< dd, FF >
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,24 +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 │ │ │ │ │ - * _o_r_t_h_o_n_o_r_m_a_l │ │ │ │ │ + * _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 │ │ │ │ │ -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> │ │ │ │ │ +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_:_:_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_ _> │ │ │ │ │ +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_:_:_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_:_:_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_._._. │ │ │ │ │ +  │ │ │ │ │ +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/a00191_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: orthonormalbasis.hh Source File │ │ │ │ +dune-localfunctions: hierarchicalsimplexp2localbasis.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -70,115 +70,367 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
orthonormalbasis.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_ORTHONORMALBASIS_HH
│ │ │ │ -
6#define DUNE_ORTHONORMALBASIS_HH
│ │ │ │ +
5#ifndef DUNE_HIERARCHICAL_SIMPLEX_P2_LOCALBASIS_HH
│ │ │ │ +
6#define DUNE_HIERARCHICAL_SIMPLEX_P2_LOCALBASIS_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 };
│ │ │ │ +
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 }
│ │ │ │
│ │ │ │ -
30
│ │ │ │ - │ │ │ │ -
32 typedef typename MonomialBasisProviderType::Object MonomialBasisType;
│ │ │ │ -
33
│ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ -
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 );
│ │ │ │ -
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 }
│ │ │ │ +
29 };
│ │ │ │
│ │ │ │ -
57 static void release( Object *object ) { delete object; }
│ │ │ │ -
58 };
│ │ │ │ +
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 }
│ │ │ │
│ │ │ │
59
│ │ │ │ -
60}
│ │ │ │ -
61
│ │ │ │ -
62#endif // #ifndef DUNE_ORTHONORMALBASIS_HH
│ │ │ │ - │ │ │ │ - │ │ │ │ +
│ │ │ │ +
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 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
│ │ │ │ +
│ │ │ │ +
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
│ │ │ │ -
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
│ │ │ │ +
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,144 +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 │ │ │ │ │ - * _o_r_t_h_o_n_o_r_m_a_l │ │ │ │ │ -orthonormalbasis.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_ORTHONORMALBASIS_HH │ │ │ │ │ -6#define DUNE_ORTHONORMALBASIS_HH │ │ │ │ │ +5#ifndef DUNE_HIERARCHICAL_SIMPLEX_P2_LOCALBASIS_HH │ │ │ │ │ +6#define DUNE_HIERARCHICAL_SIMPLEX_P2_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_/_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; │ │ │ │ │ +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 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 │ │ │ │ │ -_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 }; │ │ │ │ │ +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 } │ │ │ │ │ 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 │ │ │ │ │ +_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 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]; │ │ │ │ │ +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 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 │ │ │ │ │ +_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 } │ │ │ │ │ +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]; │ │ │ │ │ +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_:_:_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 │ │ │ │ │ +_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 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 │ │ │ │ │ +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/a00194.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: orthonormalcompute.hh File Reference │ │ │ │ +dune-localfunctions: hierarchicalsimplexp2localinterpolation.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -65,57 +65,37 @@ │ │ │ │
│ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ Classes | │ │ │ │ -Namespaces | │ │ │ │ -Functions
│ │ │ │ -
orthonormalcompute.hh File Reference
│ │ │ │ +Namespaces
│ │ │ │ +
hierarchicalsimplexp2localinterpolation.hh File Reference
│ │ │ │ │ │ │ │
│ │ │ │ -
#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/utility/monomialbasis.hh>
│ │ │ │ -#include <dune/localfunctions/utility/multiindex.hh>
│ │ │ │ +
#include <vector>
│ │ │ │
│ │ │ │

Go to the source code of this file.

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

│ │ │ │ Classes

struct  ONBCompute::Integral< geometryId >
 
class  ONBCompute::ONBMatrix< geometryId, scalar_t >
class  Dune::HierarchicalSimplexP2LocalInterpolation< LB >
 
│ │ │ │ │ │ │ │ - │ │ │ │ + │ │ │ │ │ │ │ │ -

│ │ │ │ Namespaces

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

│ │ │ │ -Functions

template<class scalar_t >
scalar_t ONBCompute::factorial (int start, int end)
 
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,36 +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 │ │ │ │ │ - * _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_/_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> │ │ │ │ │ + * _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 │ │ │ │ │ +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   _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_:_:_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   _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/a00194_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: orthonormalcompute.hh Source File │ │ │ │ +dune-localfunctions: hierarchicalsimplexp2localinterpolation.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -70,264 +70,130 @@ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
orthonormalcompute.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_ORTHONORMALCOMPUTE_HH
│ │ │ │ -
6#define DUNE_ORTHONORMALCOMPUTE_HH
│ │ │ │ +
5#ifndef DUNE_HIERARCHICAL_SIMPLEX_P2_LOCALINTERPOLATION_HH
│ │ │ │ +
6#define DUNE_HIERARCHICAL_SIMPLEX_P2_LOCALINTERPOLATION_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>
│ │ │ │ -
17
│ │ │ │ -
18#include <dune/geometry/type.hh>
│ │ │ │ +
8#include <vector>
│ │ │ │ +
9
│ │ │ │ +
10namespace Dune
│ │ │ │ +
11{
│ │ │ │ +
15 template<class LB>
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
17 {
│ │ │ │ +
18 public:
│ │ │ │
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 }
│ │ │ │ -
│ │ │ │ +
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
│ │ │ │ -
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();
│ │ │ │ +
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
│ │ │ │ -
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 };
│ │ │ │ -
│ │ │ │ +
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
│ │ │ │ -
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;
│ │ │ │ +
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 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 };
│ │ │ │ +
99 }
│ │ │ │ +
100 }
│ │ │ │
│ │ │ │ -
200
│ │ │ │ -
201} // namespace ONBCompute
│ │ │ │ +
101
│ │ │ │ +
102 };
│ │ │ │
│ │ │ │ -
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
│ │ │ │ +
103}
│ │ │ │ +
104
│ │ │ │ +
105#endif
│ │ │ │ +
Definition bdfmcube.hh:18
│ │ │ │ +
Definition hierarchicalsimplexp2localinterpolation.hh:17
│ │ │ │ +
void interpolate(const F &f, std::vector< C > &out) const
Definition hierarchicalsimplexp2localinterpolation.hh:21
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,277 +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 │ │ │ │ │ - * _o_r_t_h_o_n_o_r_m_a_l │ │ │ │ │ -orthonormalcompute.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_ORTHONORMALCOMPUTE_HH │ │ │ │ │ -6#define DUNE_ORTHONORMALCOMPUTE_HH │ │ │ │ │ +5#ifndef DUNE_HIERARCHICAL_SIMPLEX_P2_LOCALINTERPOLATION_HH │ │ │ │ │ +6#define DUNE_HIERARCHICAL_SIMPLEX_P2_LOCALINTERPOLATION_HH │ │ │ │ │ 7 │ │ │ │ │ -8#include │ │ │ │ │ -9#include │ │ │ │ │ -10#include │ │ │ │ │ -11#include │ │ │ │ │ -12#include │ │ │ │ │ -13#include │ │ │ │ │ -14 │ │ │ │ │ -15#include │ │ │ │ │ -16#include │ │ │ │ │ -17 │ │ │ │ │ -18#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_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#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 } │ │ │ │ │ +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 │ │ │ │ │ -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(); │ │ │ │ │ +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 │ │ │ │ │ -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 }; │ │ │ │ │ +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 │ │ │ │ │ -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; │ │ │ │ │ +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 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 │ │ │ │ │ -_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 │ │ │ │ │ +99 } │ │ │ │ │ +100 } │ │ │ │ │ +101 │ │ │ │ │ +102 }; │ │ │ │ │ +103} │ │ │ │ │ +104 │ │ │ │ │ +105#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 │ │ │ │ │ =============================================================================== │ │ │ │ │ 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: raviartthomas3cube2d.hh File Reference │ │ │ │ +dune-localfunctions: rannachertureklocalbasis.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -65,36 +65,34 @@ │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ Classes | │ │ │ │ Namespaces
│ │ │ │ -
raviartthomas3cube2d.hh File Reference
│ │ │ │ +
rannachertureklocalbasis.hh File Reference
│ │ │ │
│ │ │ │
│ │ │ │ -
#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...
struct  Dune::RannacherTurekLocalBasis< D, R, 2 >
 
struct  Dune::RannacherTurekLocalBasis< D, R, 3 >
 
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ Namespaces

namespace  Dune
 
│ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,24 +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_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 │ │ │ │ │ -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" │ │ │ │ │ +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 │ │ │ │ │ -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_._._. │ │ │ │ │ +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_ _> │ │ │ │ │   │ │ │ │ │ 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: raviartthomas3cube2d.hh Source File │ │ │ │ +dune-localfunctions: rannachertureklocalbasis.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -70,123 +70,60 @@ │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
raviartthomas3cube2d.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_LOCALFUNCTIONS_RAVIARTTHOMAS3_CUBE2D_LOCALFINITEELEMENT_HH
│ │ │ │ -
6#define DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS3_CUBE2D_LOCALFINITEELEMENT_HH
│ │ │ │ +
5#ifndef DUNE_RANNACHER_TUREK_LOCALBASIS_HH
│ │ │ │ +
6#define DUNE_RANNACHER_TUREK_LOCALBASIS_HH
│ │ │ │
7
│ │ │ │ -
8#include <dune/geometry/type.hh>
│ │ │ │ -
9
│ │ │ │ -
10#include "../common/localfiniteelementtraits.hh"
│ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ -
14
│ │ │ │ -
15namespace Dune
│ │ │ │ -
16{
│ │ │ │ -
27 template<class D, class R>
│ │ │ │ + │ │ │ │ + │ │ │ │ +
10
│ │ │ │ +
11namespace Dune
│ │ │ │ +
12{
│ │ │ │ +
13
│ │ │ │ +
24 template< class D, class R, unsigned int d >
│ │ │ │ + │ │ │ │ +
26
│ │ │ │ +
27 template< class D, class R >
│ │ │ │
│ │ │ │ - │ │ │ │ -
29 {
│ │ │ │ -
30
│ │ │ │ -
31 public:
│ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ +
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
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
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
│ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ +
37} // namespace Dune
│ │ │ │ +
38
│ │ │ │ +
39#endif // #ifndef DUNE_RANNACHER_TUREK_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
│ │ │ │ -
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
│ │ │ │ +
Definition rannacherturek2dlocalbasis.hh:24
│ │ │ │ +
Definition rannacherturek3dlocalbasis.hh:24
│ │ │ │ +
Rannacher-Turek shape functions.
Definition rannachertureklocalbasis.hh:25
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,136 +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 │ │ │ │ │ - * _r_a_v_i_a_r_t_t_h_o_m_a_s │ │ │ │ │ -raviartthomas3cube2d.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_LOCALFUNCTIONS_RAVIARTTHOMAS3_CUBE2D_LOCALFINITEELEMENT_HH │ │ │ │ │ -6#define DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS3_CUBE2D_LOCALFINITEELEMENT_HH │ │ │ │ │ +5#ifndef DUNE_RANNACHER_TUREK_LOCALBASIS_HH │ │ │ │ │ +6#define DUNE_RANNACHER_TUREK_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_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; │ │ │ │ │ +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 │ │ │ │ │ -_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 │ │ │ │ │ +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_:_:_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_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/a00200.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: raviartthomassimplexinterpolation.hh File Reference │ │ │ │ +dune-localfunctions: rannachertureklocalcoefficients.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -65,50 +65,36 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ Classes | │ │ │ │ Namespaces
│ │ │ │ -
raviartthomassimplexinterpolation.hh File Reference
│ │ │ │ +
rannachertureklocalcoefficients.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 <algorithm>
│ │ │ │ +#include <array>
│ │ │ │ +#include <cassert>
│ │ │ │ +#include <cstddef>
│ │ │ │ +#include <dune/localfunctions/common/localkey.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 >
struct  Dune::RannacherTurekLocalCoefficients< d >
 layout for Rannacher-Turek elements 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 │ │ │ │ │ + * _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 │ │ │ │ │ -raviartthomassimplexinterpolation.hh File Reference │ │ │ │ │ -#include │ │ │ │ │ -#include │ │ │ │ │ -#include │ │ │ │ │ -#include │ │ │ │ │ -#include │ │ │ │ │ -#include │ │ │ │ │ -#include │ │ │ │ │ +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> │ │ │ │ │ -#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_:_:_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_ _> │ │ │ │ │ +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/a00200_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: raviartthomassimplexinterpolation.hh Source File │ │ │ │ +dune-localfunctions: rannachertureklocalcoefficients.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -70,547 +70,96 @@ │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
raviartthomassimplexinterpolation.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_LOCALFUNCTIONS_RAVIARTTHOMAS_RAVIARTTHOMASSIMPLEX_RAVIARTTHOMASSIMPLEXINTERPOLATION_HH
│ │ │ │ -
6#define DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS_RAVIARTTHOMASSIMPLEX_RAVIARTTHOMASSIMPLEXINTERPOLATION_HH
│ │ │ │ +
5#ifndef DUNE_RANNACHER_TUREK_LOCALCOEFFICIENTS_HH
│ │ │ │ +
6#define DUNE_RANNACHER_TUREK_LOCALCOEFFICIENTS_HH
│ │ │ │
7
│ │ │ │ -
8#include <fstream>
│ │ │ │ -
9#include <utility>
│ │ │ │ -
10
│ │ │ │ -
11#include <dune/common/exceptions.hh>
│ │ │ │ +
8#include <algorithm>
│ │ │ │ +
9#include <array>
│ │ │ │ +
10#include <cassert>
│ │ │ │ +
11#include <cstddef>
│ │ │ │
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
│ │ │ │ + │ │ │ │ +
14
│ │ │ │ +
15namespace Dune
│ │ │ │ +
16{
│ │ │ │ +
25 template< unsigned int d >
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
27 {
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
29 {
│ │ │ │ +
30 for( std::size_t i = 0; i < 2*d; ++i )
│ │ │ │ +
31 localKeys_[ i ] = LocalKey( i, 1, 0 );
│ │ │ │ +
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 }
│ │ │ │ -
│ │ │ │ -
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
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
35 {
│ │ │ │ +
36 (*this) = other;
│ │ │ │ +
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 };
│ │ │ │ +
│ │ │ │ +
61
│ │ │ │ +
62} // namespace Dune
│ │ │ │
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
│ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ +
64#endif // #ifndef DUNE_RANNACHER_TUREK_LOCALCOEFFICIENTS_HH
│ │ │ │ + │ │ │ │
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
│ │ │ │ +
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,615 +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 │ │ │ │ │ - * _r_a_v_i_a_r_t_t_h_o_m_a_s_s_i_m_p_l_e_x │ │ │ │ │ -raviartthomassimplexinterpolation.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_LOCALFUNCTIONS_RAVIARTTHOMAS_RAVIARTTHOMASSIMPLEX_RAVIARTTHOMASSIMPLEXINTERPOLATION_HH │ │ │ │ │ -6#define │ │ │ │ │ -DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS_RAVIARTTHOMASSIMPLEX_RAVIARTTHOMASSIMPLEXINTERPOLATION_HH │ │ │ │ │ +5#ifndef DUNE_RANNACHER_TUREK_LOCALCOEFFICIENTS_HH │ │ │ │ │ +6#define DUNE_RANNACHER_TUREK_LOCALCOEFFICIENTS_HH │ │ │ │ │ 7 │ │ │ │ │ -8#include │ │ │ │ │ -9#include │ │ │ │ │ -10 │ │ │ │ │ -11#include │ │ │ │ │ +8#include │ │ │ │ │ +9#include │ │ │ │ │ +10#include │ │ │ │ │ +11#include │ │ │ │ │ 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 │ │ │ │ │ +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 // 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 } │ │ │ │ │ -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 │ │ │ │ │ +_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 │ │ │ │ │ +_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 │ │ │ │ │ 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 │ │ │ │ │ -_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 │ │ │ │ │ +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_:_:_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 │ │ │ │ │ +_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 │ │ │ │ │ -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 │ │ │ │ │ +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/a00203.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: raviartthomassimplexprebasis.hh File Reference │ │ │ │ +dune-localfunctions: rannacherturek3dlocalbasis.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -65,38 +65,35 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ Classes | │ │ │ │ Namespaces
│ │ │ │ -
raviartthomassimplexprebasis.hh File Reference
│ │ │ │ +
rannacherturek3dlocalbasis.hh File Reference
│ │ │ │
│ │ │ │
│ │ │ │ -
#include <fstream>
│ │ │ │ -#include <utility>
│ │ │ │ -#include <dune/geometry/type.hh>
│ │ │ │ -#include <dune/localfunctions/utility/polynomialbasis.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::RTPreBasisFactory< dim, Field >
 
struct  Dune::RTPreBasisFactory< dim, Field >::EvaluationBasisFactory< dd, FF >
 
struct  Dune::RTVecMatrix< geometryId, Field >
class  Dune::RannacherTurek3DLocalBasis< D, R >
 
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ 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 │ │ │ │ │ + * _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 │ │ │ │ │ -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> │ │ │ │ │ +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_:_:_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_:_:_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 │ │ │ │ │   │ │ │ │ │ =============================================================================== │ │ │ │ │ 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: raviartthomassimplexprebasis.hh Source File │ │ │ │ +dune-localfunctions: rannacherturek3dlocalbasis.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -70,283 +70,167 @@ │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
raviartthomassimplexprebasis.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_RAVIARTTHOMASPREBASIS_HH
│ │ │ │ -
6#define DUNE_RAVIARTTHOMASPREBASIS_HH
│ │ │ │ +
5#ifndef DUNE_RANNACHER_TUREK_3D_LOCALBASIS_HH
│ │ │ │ +
6#define DUNE_RANNACHER_TUREK_3D_LOCALBASIS_HH
│ │ │ │
7
│ │ │ │ -
8#include <fstream>
│ │ │ │ -
9#include <utility>
│ │ │ │ +
8#include <numeric>
│ │ │ │ +
9#include <vector>
│ │ │ │
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();
│ │ │ │ -
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
│ │ │ │ - │ │ │ │ +
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#endif // #ifndef DUNE_RANNACHER_TUREK_3D_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 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
│ │ │ │ +
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,329 +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 │ │ │ │ │ - * _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 │ │ │ │ │ + * _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_RAVIARTTHOMASPREBASIS_HH │ │ │ │ │ -6#define DUNE_RAVIARTTHOMASPREBASIS_HH │ │ │ │ │ +5#ifndef DUNE_RANNACHER_TUREK_3D_LOCALBASIS_HH │ │ │ │ │ +6#define DUNE_RANNACHER_TUREK_3D_LOCALBASIS_HH │ │ │ │ │ 7 │ │ │ │ │ -8#include │ │ │ │ │ -9#include │ │ │ │ │ +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(); │ │ │ │ │ -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 // 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 │ │ │ │ │ +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 │ │ │ │ │ +_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#endif // #ifndef DUNE_RANNACHER_TUREK_3D_LOCALBASIS_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_:_:_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_:_:_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 │ │ │ │ │ -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 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/a00206.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: raviartthomassimplexbasis.hh File Reference │ │ │ │ +dune-localfunctions: rannacherturek2dlocalbasis.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -65,35 +65,35 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ Classes | │ │ │ │ Namespaces
│ │ │ │ -
raviartthomassimplexbasis.hh File Reference
│ │ │ │ +
rannacherturek2dlocalbasis.hh File Reference
│ │ │ │
│ │ │ │
│ │ │ │ -
#include <fstream>
│ │ │ │ -#include <dune/common/exceptions.hh>
│ │ │ │ -#include <dune/localfunctions/utility/defaultbasisfactory.hh>
│ │ │ │ -#include "raviartthomassimplexinterpolation.hh"
│ │ │ │ -#include "raviartthomassimplexprebasis.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::RaviartThomasBasisFactory< dim, SF, CF >
struct  Dune::RannacherTurek2DLocalBasis< D, R >
 
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ 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_s_i_m_p_l_e_x │ │ │ │ │ + * _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 │ │ │ │ │ -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" │ │ │ │ │ +rannacherturek2dlocalbasis.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_:_:_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_ _> │ │ │ │ │ +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/a00206_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: raviartthomassimplexbasis.hh Source File │ │ │ │ +dune-localfunctions: rannacherturek2dlocalbasis.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -70,72 +70,159 @@ │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
raviartthomassimplexbasis.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_RAVIARTTHOMASBASIS_HH
│ │ │ │ -
6#define DUNE_RAVIARTTHOMASBASIS_HH
│ │ │ │ +
5#ifndef DUNE_RANNACHER_TUREK_2D_LOCALBASIS_HH
│ │ │ │ +
6#define DUNE_RANNACHER_TUREK_2D_LOCALBASIS_HH
│ │ │ │
7
│ │ │ │ -
8#include <fstream>
│ │ │ │ -
9#include <dune/common/exceptions.hh>
│ │ │ │ +
8#include <numeric>
│ │ │ │ +
9#include <vector>
│ │ │ │
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 */
│ │ │ │ +
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
│ │ │ │ -
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
│ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ +
│ │ │ │ +
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 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
│ │ │ │ -
Definition raviartthomassimplexbasis.hh:40
│ │ │ │ -
Definition defaultbasisfactory.hh:38
│ │ │ │ +
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,70 +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 │ │ │ │ │ - * _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 │ │ │ │ │ + * _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_RAVIARTTHOMASBASIS_HH │ │ │ │ │ -6#define DUNE_RAVIARTTHOMASBASIS_HH │ │ │ │ │ +5#ifndef DUNE_RANNACHER_TUREK_2D_LOCALBASIS_HH │ │ │ │ │ +6#define DUNE_RANNACHER_TUREK_2D_LOCALBASIS_HH │ │ │ │ │ 7 │ │ │ │ │ -8#include │ │ │ │ │ -9#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_/_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 */ │ │ │ │ │ +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 │ │ │ │ │ -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 │ │ │ │ │ +_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 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_:_:_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_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 │ │ │ │ │ =============================================================================== │ │ │ │ │ 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: raviartthomas4cube2dlocalcoefficients.hh File Reference │ │ │ │ +dune-localfunctions: rannacherturek.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -65,41 +65,29 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
│ │ │ │ -Classes | │ │ │ │ -Namespaces
│ │ │ │ -
raviartthomas4cube2dlocalcoefficients.hh File Reference
│ │ │ │ +
rannacherturek.hh File Reference
│ │ │ │
│ │ │ │
│ │ │ │ -
#include <cstddef>
│ │ │ │ -#include <vector>
│ │ │ │ -#include "../../common/localkey.hh"
│ │ │ │ + │ │ │ │ +

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

│ │ │ │ + │ │ │ │

Go to the source code of this file.

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

│ │ │ │ -Classes

class  Dune::RT4Cube2DLocalCoefficients
 Layout map for Raviart-Thomas-4 elements on quadrilaterals. More...
 
│ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ -

│ │ │ │ -Namespaces

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

Detailed Description

│ │ │ │ +

Convenience header that includes all available Rannacher-Turek LocalFiniteElements.

│ │ │ │ +
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,23 +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 │ │ │ │ │ - * _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" │ │ │ │ │ +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_:_:_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 │ │ │ │ │ -  │ │ │ │ │ +********** 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/a00209_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: raviartthomas4cube2dlocalcoefficients.hh Source File │ │ │ │ +dune-localfunctions: rannacherturek.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -70,85 +70,27 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
raviartthomas4cube2dlocalcoefficients.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_LOCALFUNCTIONS_RAVIARTTHOMAS4_CUBE2D_LOCALCOEFFICIENTS_HH
│ │ │ │ -
6#define DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS4_CUBE2D_LOCALCOEFFICIENTS_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
│ │ │ │ -
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
│ │ │ │ + │ │ │ │ + │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,83 +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 │ │ │ │ │ - * _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 │ │ │ │ │ +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_LOCALFUNCTIONS_RAVIARTTHOMAS4_CUBE2D_LOCALCOEFFICIENTS_HH │ │ │ │ │ -6#define DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS4_CUBE2D_LOCALCOEFFICIENTS_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 │ │ │ │ │ -_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() │ │ │ │ │ -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 │ │ │ │ │ +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/a00212.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: raviartthomas4cube2dlocalbasis.hh File Reference │ │ │ │ +dune-localfunctions: rannachertureklocalinterpolation.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -65,36 +65,36 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ Classes | │ │ │ │ Namespaces
│ │ │ │ -
raviartthomas4cube2dlocalbasis.hh File Reference
│ │ │ │ +
rannachertureklocalinterpolation.hh File Reference
│ │ │ │
│ │ │ │
│ │ │ │ -
#include <bitset>
│ │ │ │ -#include <numeric>
│ │ │ │ +
#include <cassert>
│ │ │ │ #include <vector>
│ │ │ │ -#include <dune/common/fmatrix.hh>
│ │ │ │ -#include "../../common/localbasis.hh"
│ │ │ │ +#include <dune/common/fvector.hh>
│ │ │ │ +#include <dune/geometry/referenceelements.hh>
│ │ │ │ +#include <dune/localfunctions/common/localbasis.hh>
│ │ │ │
│ │ │ │

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::RannacherTurekLocalInterpolation< D, R, d >
 please doc me More...
 
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ Namespaces

namespace  Dune
 
│ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,26 +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 │ │ │ │ │ + * _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 │ │ │ │ │ -raviartthomas4cube2dlocalbasis.hh File Reference │ │ │ │ │ -#include │ │ │ │ │ -#include │ │ │ │ │ +rannachertureklocalinterpolation.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 │ │ │ │ │ +#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_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_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/a00212_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: raviartthomas4cube2dlocalbasis.hh Source File │ │ │ │ +dune-localfunctions: rannachertureklocalinterpolation.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -70,814 +70,85 @@ │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
raviartthomas4cube2dlocalbasis.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_LOCALFUNCTIONS_RAVIARTTHOMAS4_CUBE2D_LOCALBASIS_HH
│ │ │ │ -
6#define DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS4_CUBE2D_LOCALBASIS_HH
│ │ │ │ +
5#ifndef DUNE_RANNACHER_TUREK_LOCALINTERPOLATION_HH
│ │ │ │ +
6#define DUNE_RANNACHER_TUREK_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;
│ │ │ │ -
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 }
│ │ │ │ -
│ │ │ │ +
8#include <cassert>
│ │ │ │ +
9#include <vector>
│ │ │ │ +
10
│ │ │ │ +
11#include <dune/common/fvector.hh>
│ │ │ │ +
12
│ │ │ │ +
13#include <dune/geometry/referenceelements.hh>
│ │ │ │ +
14
│ │ │ │ + │ │ │ │ +
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
│ │ │ │ -
│ │ │ │ -
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
│ │ │ │ +
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
│ │ │ │
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
│ │ │ │ +
please doc me
Definition rannachertureklocalinterpolation.hh:31
│ │ │ │ +
void interpolate(const F &f, std::vector< C > &out) const
Definition rannachertureklocalinterpolation.hh:38
│ │ │ │ + │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,826 +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 │ │ │ │ │ - * _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_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_LOCALFUNCTIONS_RAVIARTTHOMAS4_CUBE2D_LOCALBASIS_HH │ │ │ │ │ -6#define DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS4_CUBE2D_LOCALBASIS_HH │ │ │ │ │ +5#ifndef DUNE_RANNACHER_TUREK_LOCALINTERPOLATION_HH │ │ │ │ │ +6#define DUNE_RANNACHER_TUREK_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; │ │ │ │ │ -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 } │ │ │ │ │ +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> │ │ │ │ │ +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 │ │ │ │ │ -_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 │ │ │ │ │ +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_:_:_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_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/a00215.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: raviartthomas4cube2dlocalinterpolation.hh File Reference │ │ │ │ +dune-localfunctions: lagrange.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -65,40 +65,54 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ Classes | │ │ │ │ Namespaces
│ │ │ │ -
raviartthomas4cube2dlocalinterpolation.hh File Reference
│ │ │ │ +
lagrange.hh File Reference
│ │ │ │
│ │ │ │
│ │ │ │ -
#include <vector>
│ │ │ │ -#include <dune/geometry/quadraturerules.hh>
│ │ │ │ + │ │ │ │ +

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

│ │ │ │ + │ │ │ │

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::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_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 │ │ │ │ │ +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_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. │ │ │ │ │ +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/a00215_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: raviartthomas4cube2dlocalinterpolation.hh Source File │ │ │ │ +dune-localfunctions: lagrange.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -70,173 +70,90 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
raviartthomas4cube2dlocalinterpolation.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_RAVIARTTHOMAS4_CUBE2D_LOCALINTERPOLATION_HH
│ │ │ │ -
6#define DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS4_CUBE2D_LOCALINTERPOLATION_HH
│ │ │ │ +
5#ifndef DUNE_LOCALFUNCTIONS_LAGRANGE_HH
│ │ │ │ +
6#define DUNE_LOCALFUNCTIONS_LAGRANGE_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 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
│ │ │ │ +
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
│ │ │ │ -
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
│ │ │ │ +
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,187 +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 │ │ │ │ │ -raviartthomas4cube2dlocalinterpolation.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_RAVIARTTHOMAS4_CUBE2D_LOCALINTERPOLATION_HH │ │ │ │ │ -6#define DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS4_CUBE2D_LOCALINTERPOLATION_HH │ │ │ │ │ +5#ifndef DUNE_LOCALFUNCTIONS_LAGRANGE_HH │ │ │ │ │ +6#define DUNE_LOCALFUNCTIONS_LAGRANGE_HH │ │ │ │ │ 7 │ │ │ │ │ -8#include │ │ │ │ │ -9 │ │ │ │ │ -10#include │ │ │ │ │ -11 │ │ │ │ │ -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 │ │ │ │ │ +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_b_a_s_i_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 │ │ │ │ │ +_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 │ │ │ │ │ +_p_0_._h_h │ │ │ │ │ +_p_q_2_2_d_._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_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/a00218.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: raviartthomas12d.hh File Reference │ │ │ │ +dune-localfunctions: hierarchical.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -65,43 +65,31 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
│ │ │ │ -Classes | │ │ │ │ -Namespaces
│ │ │ │ -
raviartthomas12d.hh File Reference
│ │ │ │ +
hierarchical.hh File Reference
│ │ │ │
│ │ │ │
│ │ │ │ -
#include <dune/geometry/type.hh>
│ │ │ │ -#include "../common/localfiniteelementtraits.hh"
│ │ │ │ -#include "raviartthomas12d/raviartthomas12dlocalbasis.hh"
│ │ │ │ -#include "raviartthomas12d/raviartthomas12dlocalcoefficients.hh"
│ │ │ │ -#include "raviartthomas12d/raviartthomas12dlocalinterpolation.hh"
│ │ │ │ + │ │ │ │ +

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

│ │ │ │ + │ │ │ │

Go to the source code of this file.

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

│ │ │ │ -Classes

class  Dune::RT12DLocalFiniteElement< D, R >
 First order Raviart-Thomas shape functions on triangles. More...
 
│ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ -

│ │ │ │ -Namespaces

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

Detailed Description

│ │ │ │ +

Convenience header that includes all available hierarchical LocalFiniteElements.

│ │ │ │ +
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,24 +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 │ │ │ │ │ - * _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 │ │ │ │ │ -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" │ │ │ │ │ +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_:_:_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 │ │ │ │ │ -  │ │ │ │ │ +********** DDeettaaiilleedd DDeessccrriippttiioonn ********** │ │ │ │ │ +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/a00218_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: raviartthomas12d.hh Source File │ │ │ │ +dune-localfunctions: hierarchical.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -70,124 +70,31 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
raviartthomas12d.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_LOCALFUNCTIONS_RAVIARTTHOMAS12DLOCALFINITEELEMENT_HH
│ │ │ │ -
6#define DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS12DLOCALFINITEELEMENT_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
│ │ │ │ -
31 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:
│ │ │ │ - │ │ │ │ -
77 RT12DLocalCoefficients coefficients;
│ │ │ │ - │ │ │ │ -
79 };
│ │ │ │ -
│ │ │ │ -
80}
│ │ │ │ -
81
│ │ │ │ -
82#endif // DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS12DLOCALFINITEELEMENT_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 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
│ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,137 +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 │ │ │ │ │ -raviartthomas12d.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_LOCALFUNCTIONS_RAVIARTTHOMAS12DLOCALFINITEELEMENT_HH │ │ │ │ │ -6#define DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS12DLOCALFINITEELEMENT_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 │ │ │ │ │ -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 │ │ │ │ │ -_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_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 │ │ │ │ │ -_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_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_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 │ │ │ │ │ +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/a00221.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: raviartthomas0prism.hh File Reference │ │ │ │ +dune-localfunctions: raviartthomas1cube2d.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -72,29 +72,29 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ Classes | │ │ │ │ Namespaces
│ │ │ │ -
raviartthomas0prism.hh File Reference
│ │ │ │ +
raviartthomas1cube2d.hh File Reference
│ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │

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::RT1Cube2DLocalFiniteElement< D, R >
 First order Raviart-Thomas shape functions on quadrilaterals. More...
 
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ Namespaces

namespace  Dune
 
│ │ │ │ ├── html2text {} │ │ │ │ │ @@ -2,23 +2,23 @@ │ │ │ │ │ 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 │ │ │ │ │ -raviartthomas0prism.hh File Reference │ │ │ │ │ +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_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" │ │ │ │ │ +#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_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_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/a00221_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: raviartthomas0prism.hh Source File │ │ │ │ +dune-localfunctions: raviartthomas1cube2d.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -74,120 +74,120 @@ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ -
raviartthomas0prism.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_PRISM_HH
│ │ │ │ -
6#define DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS0_PRISM_HH
│ │ │ │ +
5#ifndef DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS1_CUBE2D_LOCALFINITEELEMENT_HH
│ │ │ │ +
6#define DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS1_CUBE2D_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
│ │ │ │ +
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
│ │ │ │ +
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
│ │ │ │ +
66 unsigned int size () const
│ │ │ │
67 {
│ │ │ │
68 return basis.size();
│ │ │ │
69 }
│ │ │ │
│ │ │ │
70
│ │ │ │
│ │ │ │ -
71 static constexpr GeometryType type ()
│ │ │ │ +
71 static constexpr GeometryType type ()
│ │ │ │
72 {
│ │ │ │ -
73 return GeometryTypes::prism;
│ │ │ │ +
73 return GeometryTypes::quadrilateral;
│ │ │ │
74 }
│ │ │ │
│ │ │ │
75
│ │ │ │
76 private:
│ │ │ │ - │ │ │ │ -
78 RT0PrismLocalCoefficients coefficients;
│ │ │ │ - │ │ │ │ + │ │ │ │ +
78 RT1Cube2DLocalCoefficients coefficients;
│ │ │ │ + │ │ │ │
80 };
│ │ │ │
│ │ │ │
81}
│ │ │ │ -
82#endif // DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS0_PRISM_HH
│ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ +
82#endif // DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS1_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
│ │ │ │ -
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
│ │ │ │ +
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,48 +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 │ │ │ │ │ * _r_a_v_i_a_r_t_t_h_o_m_a_s │ │ │ │ │ -raviartthomas0prism.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_PRISM_HH │ │ │ │ │ -6#define DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS0_PRISM_HH │ │ │ │ │ +5#ifndef DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS1_CUBE2D_LOCALFINITEELEMENT_HH │ │ │ │ │ +6#define DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS1_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_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" │ │ │ │ │ +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{ │ │ │ │ │ -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 │ │ │ │ │ +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_0_P_r_i_s_m_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t () │ │ │ │ │ +_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_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) : │ │ │ │ │ +_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; │ │ │ │ │ @@ -61,77 +61,77 @@ │ │ │ │ │ _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; │ │ │ │ │ +73 return GeometryTypes::quadrilateral; │ │ │ │ │ 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; │ │ │ │ │ +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_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_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_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_c_o_e_f_f_i_c_i_e_n_t_s_._h_h │ │ │ │ │ +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_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_:_:_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 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 │ │ │ │ │ +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 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() │ │ │ │ │ +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 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 │ │ │ │ │ +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/a00224.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: raviartthomas02dlocalinterpolation.hh File Reference │ │ │ │ +dune-localfunctions: raviartthomas2cube2d.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -65,34 +65,36 @@ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ Classes | │ │ │ │ Namespaces
│ │ │ │ -
raviartthomas02dlocalinterpolation.hh File Reference
│ │ │ │ +
raviartthomas2cube2d.hh File Reference
│ │ │ │
│ │ │ │
│ │ │ │ -
#include <cmath>
│ │ │ │ -#include <array>
│ │ │ │ -#include <bitset>
│ │ │ │ -#include <vector>
│ │ │ │ +
#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::RT02DLocalInterpolation< LB >
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_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 │ │ │ │ │ +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_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_:_:_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/a00224_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: raviartthomas02dlocalinterpolation.hh Source File │ │ │ │ +dune-localfunctions: raviartthomas2cube2d.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -70,94 +70,123 @@ │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
raviartthomas02dlocalinterpolation.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_RT02DLOCALINTERPOLATION_HH
│ │ │ │ -
6#define DUNE_RT02DLOCALINTERPOLATION_HH
│ │ │ │ +
5#ifndef DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS2_CUBE2D_LOCALFINITEELEMENT_HH
│ │ │ │ +
6#define DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS2_CUBE2D_LOCALFINITEELEMENT_HH
│ │ │ │
7
│ │ │ │ -
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
│ │ │ │ +
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
│ │ │ │ -
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
│ │ │ │ +
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,87 +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_0_2_d │ │ │ │ │ -raviartthomas02dlocalinterpolation.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_RT02DLOCALINTERPOLATION_HH │ │ │ │ │ -6#define DUNE_RT02DLOCALINTERPOLATION_HH │ │ │ │ │ +5#ifndef DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS2_CUBE2D_LOCALFINITEELEMENT_HH │ │ │ │ │ +6#define DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS2_CUBE2D_LOCALFINITEELEMENT_HH │ │ │ │ │ 7 │ │ │ │ │ -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]; │ │ │ │ │ +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 } │ │ │ │ │ -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 │ │ │ │ │ +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_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_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_:_:_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 │ │ │ │ │ +_D_u_n_e_:_:_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 │ │ │ │ │ =============================================================================== │ │ │ │ │ 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: raviartthomas02dlocalbasis.hh File Reference │ │ │ │ +dune-localfunctions: raviartthomassimplex.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -65,40 +65,45 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ Classes | │ │ │ │ Namespaces
│ │ │ │ -
raviartthomas02dlocalbasis.hh File Reference
│ │ │ │ +
raviartthomassimplex.hh File Reference
│ │ │ │
│ │ │ │
│ │ │ │ -
#include <numeric>
│ │ │ │ -#include <dune/common/fmatrix.hh>
│ │ │ │ -#include <dune/localfunctions/common/localbasis.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::RT02DLocalBasis< D, R >
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 {} │ │ │ │ │ @@ -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 │ │ │ │ │ * _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 │ │ │ │ │ -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> │ │ │ │ │ +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_0_2_D_L_o_c_a_l_B_a_s_i_s_<_ _D_,_ _R_ _> │ │ │ │ │ +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/a00227_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: raviartthomas02dlocalbasis.hh Source File │ │ │ │ +dune-localfunctions: raviartthomassimplex.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -70,138 +70,66 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
raviartthomas02dlocalbasis.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_RT0TRIANGLELOCALBASIS_HH
│ │ │ │ -
6#define DUNE_RT0TRIANGLELOCALBASIS_HH
│ │ │ │ +
5#ifndef DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS_SIMPLEX_HH
│ │ │ │ +
6#define DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS_SIMPLEX_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,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 }
│ │ │ │ + │ │ │ │ + │ │ │ │ +
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 {}
│ │ │ │
│ │ │ │ -
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 };
│ │ │ │ +
52 };
│ │ │ │
│ │ │ │ -
105}
│ │ │ │ -
106#endif
│ │ │ │ +
53} // namespace Dune
│ │ │ │ +
54
│ │ │ │ +
55#endif // #ifndef DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS_SIMPLEX_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
│ │ │ │ - │ │ │ │ +
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,149 +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 │ │ │ │ │ - * _r_a_v_i_a_r_t_t_h_o_m_a_s_0_2_d │ │ │ │ │ -raviartthomas02dlocalbasis.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_RT0TRIANGLELOCALBASIS_HH │ │ │ │ │ -6#define DUNE_RT0TRIANGLELOCALBASIS_HH │ │ │ │ │ +5#ifndef DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS_SIMPLEX_HH │ │ │ │ │ +6#define DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS_SIMPLEX_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_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 │ │ │ │ │ +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 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 } │ │ │ │ │ +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 │ │ │ │ │ -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 │ │ │ │ │ +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_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_:_:_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/a00230.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: raviartthomas02dlocalcoefficients.hh File Reference │ │ │ │ +dune-localfunctions: raviartthomas12d.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -65,34 +65,36 @@ │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ Classes | │ │ │ │ Namespaces
│ │ │ │ -
raviartthomas02dlocalcoefficients.hh File Reference
│ │ │ │ +
raviartthomas12d.hh File Reference
│ │ │ │
│ │ │ │
│ │ │ │ -
#include <cstddef>
│ │ │ │ -#include <iostream>
│ │ │ │ -#include <vector>
│ │ │ │ -#include <dune/localfunctions/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::RT02DLocalCoefficients
class  Dune::RT12DLocalFiniteElement< D, R >
 First order Raviart-Thomas shape functions on triangles. 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 │ │ │ │ │ _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> │ │ │ │ │ +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_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_:_:_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/a00230_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: raviartthomas02dlocalcoefficients.hh Source File │ │ │ │ +dune-localfunctions: raviartthomas12d.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -70,78 +70,124 @@ │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
raviartthomas02dlocalcoefficients.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_RT0TRIANGLELOCALCOEFFICIENTS_HH
│ │ │ │ -
6#define DUNE_RT0TRIANGLELOCALCOEFFICIENTS_HH
│ │ │ │ +
5#ifndef DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS12DLOCALFINITEELEMENT_HH
│ │ │ │ +
6#define DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS12DLOCALFINITEELEMENT_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
│ │ │ │ - │ │ │ │ +
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
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
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
│ │ │ │ -
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
│ │ │ │ +
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
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,75 +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 │ │ │ │ │ -raviartthomas02dlocalcoefficients.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_RT0TRIANGLELOCALCOEFFICIENTS_HH │ │ │ │ │ -6#define DUNE_RT0TRIANGLELOCALCOEFFICIENTS_HH │ │ │ │ │ +5#ifndef DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS12DLOCALFINITEELEMENT_HH │ │ │ │ │ +6#define DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS12DLOCALFINITEELEMENT_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) │ │ │ │ │ +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 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 │ │ │ │ │ +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 │ │ │ │ │ +_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_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 │ │ │ │ │ _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_:_:_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 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 │ │ │ │ │ +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 │ │ │ │ │ =============================================================================== │ │ │ │ │ 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: raviartthomas0cube2d.hh File Reference │ │ │ │ +dune-localfunctions: raviartthomas4cube2dlocalinterpolation.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -65,34 +65,33 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ Classes | │ │ │ │ Namespaces
│ │ │ │ -
raviartthomas0cube2d.hh File Reference
│ │ │ │ +
raviartthomas4cube2dlocalinterpolation.hh File Reference
│ │ │ │
│ │ │ │
│ │ │ │ -
#include <dune/geometry/type.hh>
│ │ │ │ -#include <dune/localfunctions/common/localfiniteelementtraits.hh>
│ │ │ │ -#include "raviartthomas0cube2d/raviartthomas0cube2dall.hh"
│ │ │ │ +
#include <vector>
│ │ │ │ +#include <dune/geometry/quadraturerules.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::RT4Cube2DLocalInterpolation< LB >
 Second order Raviart-Thomas 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 │ │ │ │ │ * _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 │ │ │ │ │ -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" │ │ │ │ │ +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_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_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/a00233_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: raviartthomas0cube2d.hh Source File │ │ │ │ +dune-localfunctions: raviartthomas4cube2dlocalinterpolation.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -70,119 +70,173 @@ │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
raviartthomas0cube2d.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_RAVIARTTHOMAS0_CUBE2D_LOCALFINITEELEMENT_HH
│ │ │ │ -
6#define DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS0_CUBE2D_LOCALFINITEELEMENT_HH
│ │ │ │ +
5#ifndef DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS4_CUBE2D_LOCALINTERPOLATION_HH
│ │ │ │ +
6#define DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS4_CUBE2D_LOCALINTERPOLATION_HH
│ │ │ │
7
│ │ │ │ -
8#include <dune/geometry/type.hh>
│ │ │ │ +
8#include <vector>
│ │ │ │
9
│ │ │ │ - │ │ │ │ - │ │ │ │ -
12
│ │ │ │ -
13namespace Dune
│ │ │ │ -
14{
│ │ │ │ -
23 template<class D, class R>
│ │ │ │ +
10#include <dune/geometry/quadraturerules.hh>
│ │ │ │ +
11
│ │ │ │ +
12namespace Dune
│ │ │ │ +
13{
│ │ │ │ +
14
│ │ │ │ +
23 template<class LB>
│ │ │ │
│ │ │ │ - │ │ │ │ + │ │ │ │
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::quadrilateral;
│ │ │ │ -
64 }
│ │ │ │ -
│ │ │ │ -
65
│ │ │ │ -
66 private:
│ │ │ │ - │ │ │ │ -
68 RT0Cube2DLocalCoefficients coefficients;
│ │ │ │ - │ │ │ │ -
70 };
│ │ │ │ -
│ │ │ │ -
71}
│ │ │ │ -
72#endif // DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS0_CUBE2D_LOCALFINITEELEMENT_HH
│ │ │ │ - │ │ │ │ - │ │ │ │ +
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
│ │ │ │ -
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
│ │ │ │ +
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,127 +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 │ │ │ │ │ * _r_a_v_i_a_r_t_t_h_o_m_a_s │ │ │ │ │ -raviartthomas0cube2d.hh │ │ │ │ │ + * _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_RAVIARTTHOMAS0_CUBE2D_LOCALFINITEELEMENT_HH │ │ │ │ │ -6#define DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS0_CUBE2D_LOCALFINITEELEMENT_HH │ │ │ │ │ +5#ifndef DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS4_CUBE2D_LOCALINTERPOLATION_HH │ │ │ │ │ +6#define DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS4_CUBE2D_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_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 │ │ │ │ │ +10#include │ │ │ │ │ +11 │ │ │ │ │ +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 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 │ │ │ │ │ +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 return coefficients; │ │ │ │ │ +47 sign2 *= -1.0; │ │ │ │ │ 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 │ │ │ │ │ -_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 │ │ │ │ │ +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_:_:_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_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/a00236.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: raviartthomascube.hh File Reference │ │ │ │ +dune-localfunctions: raviartthomas4cube2dlocalbasis.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -65,68 +65,43 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ Classes | │ │ │ │ Namespaces
│ │ │ │ -
raviartthomascube.hh File Reference
│ │ │ │ +
raviartthomas4cube2dlocalbasis.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 <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::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::RT4Cube2DLocalBasis< D, R >
 Second order Raviart-Thomas shape functions on the reference quadrilateral. More...
 
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ Namespaces

namespace  Dune
 
│ │ │ │ -

Detailed Description

│ │ │ │ -

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

│ │ │ │ -
│ │ │ │ +
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,56 +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_4_c_u_b_e_2_d │ │ │ │ │ _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" │ │ │ │ │ +raviartthomas4cube2dlocalbasis.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_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_:_:_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 │ │ │ │ │   │ │ │ │ │ -********** 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/a00236_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: raviartthomascube.hh Source File │ │ │ │ +dune-localfunctions: raviartthomas4cube2dlocalbasis.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -70,213 +70,814 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
raviartthomascube.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_LOCALFUNCTIONS_RAVIARTTHOMAS_CUBE_HH
│ │ │ │ -
6#define DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS_CUBE_HH
│ │ │ │ +
5#ifndef DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS4_CUBE2D_LOCALBASIS_HH
│ │ │ │ +
6#define DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS4_CUBE2D_LOCALBASIS_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
│ │ │ │ -
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 {}
│ │ │ │ +
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
│ │ │ │ +
│ │ │ │ +
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
│ │ │ │ -
│ │ │ │ - │ │ │ │ - │ │ │ │ -
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 {}
│ │ │ │ -
│ │ │ │ +
│ │ │ │ +
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
│ │ │ │ -
│ │ │ │ - │ │ │ │ - │ │ │ │ -
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
│ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ +
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
│ │ │ │ -
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
│ │ │ │ +
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
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,221 +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_v_i_a_r_t_t_h_o_m_a_s │ │ │ │ │ -raviartthomascube.hh │ │ │ │ │ + * _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_LOCALFUNCTIONS_RAVIARTTHOMAS_CUBE_HH │ │ │ │ │ -6#define DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS_CUBE_HH │ │ │ │ │ +5#ifndef DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS4_CUBE2D_LOCALBASIS_HH │ │ │ │ │ +6#define DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS4_CUBE2D_LOCALBASIS_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#include │ │ │ │ │ +10#include │ │ │ │ │ +11 │ │ │ │ │ +12#include │ │ │ │ │ +13 │ │ │ │ │ +14#include "../../common/localbasis.hh" │ │ │ │ │ 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 {} │ │ │ │ │ +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; │ │ │ │ │ +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 │ │ │ │ │ -_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 {} │ │ │ │ │ +_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 │ │ │ │ │ -_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_3_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_1_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_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_2_c_u_b_e_2_d_._h_h │ │ │ │ │ +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_:_:_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_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 │ │ │ │ │ =============================================================================== │ │ │ │ │ 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: raviartthomas4cube2dlocalcoefficients.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -65,34 +65,34 @@ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ Classes | │ │ │ │ Namespaces
│ │ │ │ -
raviartthomas1cube3dlocalcoefficients.hh File Reference
│ │ │ │ +
raviartthomas4cube2dlocalcoefficients.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::RT1Cube3DLocalCoefficients
 Layout map for Raviart-Thomas-1 elements on quadrilaterals. More...
class  Dune::RT4Cube2DLocalCoefficients
 Layout map for Raviart-Thomas-4 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_1_c_u_b_e_3_d │ │ │ │ │ + * _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 │ │ │ │ │ -raviartthomas1cube3dlocalcoefficients.hh File Reference │ │ │ │ │ +raviartthomas4cube2dlocalcoefficients.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_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_._._. │ │ │ │ │ +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/a00239_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: raviartthomas1cube3dlocalcoefficients.hh Source File │ │ │ │ +dune-localfunctions: raviartthomas4cube2dlocalcoefficients.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -70,85 +70,85 @@ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
raviartthomas1cube3dlocalcoefficients.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_LOCALFUNCTIONS_RAVIARTTHOMAS1_CUBE3D_LOCALCOEFFICIENTS_HH
│ │ │ │ -
6#define DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS1_CUBE3D_LOCALCOEFFICIENTS_HH
│ │ │ │ +
5#ifndef DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS4_CUBE2D_LOCALCOEFFICIENTS_HH
│ │ │ │ +
6#define DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS4_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 < 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);
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
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 < 12; i++)
│ │ │ │ +
38 for (std::size_t i=0; i<40; i++)
│ │ │ │
39 {
│ │ │ │ -
40 li[i + 24] = LocalKey(0,0,i);
│ │ │ │ +
40 li[20 + i] = LocalKey(0,0,i);
│ │ │ │
41 }
│ │ │ │
42 }
│ │ │ │
│ │ │ │
43
│ │ │ │
│ │ │ │ -
45 std::size_t size () const
│ │ │ │ +
45 std::size_t size () const
│ │ │ │
46 {
│ │ │ │ -
47 return 36;
│ │ │ │ +
47 return 60;
│ │ │ │
48 }
│ │ │ │
│ │ │ │
49
│ │ │ │
│ │ │ │ -
51 const LocalKey& localKey (std::size_t i) const
│ │ │ │ +
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
│ │ │ │ +
60#endif // DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS4_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 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
│ │ │ │ +
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,83 +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_1_c_u_b_e_3_d │ │ │ │ │ -raviartthomas1cube3dlocalcoefficients.hh │ │ │ │ │ + * _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_LOCALFUNCTIONS_RAVIARTTHOMAS1_CUBE3D_LOCALCOEFFICIENTS_HH │ │ │ │ │ -6#define DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS1_CUBE3D_LOCALCOEFFICIENTS_HH │ │ │ │ │ +5#ifndef DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS4_CUBE2D_LOCALCOEFFICIENTS_HH │ │ │ │ │ +6#define DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS4_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_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); │ │ │ │ │ +_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 < 12; i++) │ │ │ │ │ +38 for (std::size_t i=0; i<40; i++) │ │ │ │ │ 39 { │ │ │ │ │ -40 li[i + 24] = _L_o_c_a_l_K_e_y(0,0,i); │ │ │ │ │ +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 36; │ │ │ │ │ +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_RAVIARTTHOMAS1_CUBE3D_LOCALCOEFFICIENTS_HH │ │ │ │ │ +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_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 │ │ │ │ │ +_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 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 │ │ │ │ │ +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 raviartthomas1cube3dlocalcoefficients.hh:51 │ │ │ │ │ +DDeeffiinniittiioonn raviartthomas4cube2dlocalcoefficients.hh:51 │ │ │ │ │ =============================================================================== │ │ │ │ │ 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: raviartthomas4cube2d.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -65,33 +65,36 @@ │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ Classes | │ │ │ │ Namespaces
│ │ │ │ -
raviartthomas1cube3dlocalinterpolation.hh File Reference
│ │ │ │ +
raviartthomas4cube2d.hh File Reference
│ │ │ │
│ │ │ │
│ │ │ │ -
#include <vector>
│ │ │ │ -#include <dune/geometry/quadraturerules.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::RT1Cube3DLocalInterpolation< LB >
 First order Raviart-Thomas shape functions on the reference hexahedron. More...
class  Dune::RT4Cube2DLocalFiniteElement< 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_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 │ │ │ │ │ +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 "_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_:_:_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_._._. │ │ │ │ │ +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/a00242_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: raviartthomas1cube3dlocalinterpolation.hh Source File │ │ │ │ +dune-localfunctions: raviartthomas4cube2d.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -70,154 +70,123 @@ │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
raviartthomas1cube3dlocalinterpolation.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#ifndef DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS1_CUBE3D_LOCALINTERPOLATION_HH
│ │ │ │ -
6#define DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS1_CUBE3D_LOCALINTERPOLATION_HH
│ │ │ │ +
5#ifndef DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS4_CUBE2D_LOCALFINITEELEMENT_HH
│ │ │ │ +
6#define DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS4_CUBE2D_LOCALFINITEELEMENT_HH
│ │ │ │
7
│ │ │ │ -
8#include <vector>
│ │ │ │ +
8#include <dune/geometry/type.hh>
│ │ │ │
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;
│ │ │ │ +
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
│ │ │ │ -
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();
│ │ │ │ -
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 };
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
62 {
│ │ │ │ +
63 return interpolation;
│ │ │ │ +
64 }
│ │ │ │ +
│ │ │ │ +
65
│ │ │ │ +
│ │ │ │ +
67 unsigned int size () const
│ │ │ │ +
68 {
│ │ │ │ +
69 return basis.size();
│ │ │ │ +
70 }
│ │ │ │
│ │ │ │ -
143}
│ │ │ │ -
144#endif // DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS1_CUBE3D_LOCALINTERPOLATION_HH
│ │ │ │ +
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
│ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │
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
│ │ │ │ +
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
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,175 +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_1_c_u_b_e_3_d │ │ │ │ │ -raviartthomas1cube3dlocalinterpolation.hh │ │ │ │ │ +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#ifndef DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS1_CUBE3D_LOCALINTERPOLATION_HH │ │ │ │ │ -6#define DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS1_CUBE3D_LOCALINTERPOLATION_HH │ │ │ │ │ +5#ifndef DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS4_CUBE2D_LOCALFINITEELEMENT_HH │ │ │ │ │ +6#define DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS4_CUBE2D_LOCALFINITEELEMENT_HH │ │ │ │ │ 7 │ │ │ │ │ -8#include │ │ │ │ │ +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; │ │ │ │ │ +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 │ │ │ │ │ +57 { │ │ │ │ │ +58 return coefficients; │ │ │ │ │ +59 } │ │ │ │ │ 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) │ │ │ │ │ +_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 Dune::FieldVector qPos = qp.position(); │ │ │ │ │ -70 typename LB::Traits::DomainType localPos; │ │ │ │ │ +69 return basis.size(); │ │ │ │ │ +70 } │ │ │ │ │ 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(); │ │ │ │ │ -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 │ │ │ │ │ +_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_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 │ │ │ │ │ _D_u_n_e │ │ │ │ │ DDeeffiinniittiioonn bdfmcube.hh:18 │ │ │ │ │ -_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 │ │ │ │ │ +_D_u_n_e_:_:_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, 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 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 │ │ │ │ │ +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 │ │ │ │ │ +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/a00245.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: raviartthomas1cube3dlocalbasis.hh File Reference │ │ │ │ +dune-localfunctions: raviartthomas1cube3dlocalcoefficients.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -72,28 +72,27 @@ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ Classes | │ │ │ │ Namespaces
│ │ │ │ -
raviartthomas1cube3dlocalbasis.hh File Reference
│ │ │ │ +
raviartthomas1cube3dlocalcoefficients.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::RT1Cube3DLocalCoefficients
 Layout map for Raviart-Thomas-1 elements on quadrilaterals. More...
 
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ Namespaces

namespace  Dune
 
│ │ │ │ ├── html2text {} │ │ │ │ │ @@ -3,23 +3,21 @@ │ │ │ │ │ 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 │ │ │ │ │ -raviartthomas1cube3dlocalbasis.hh File Reference │ │ │ │ │ -#include │ │ │ │ │ +raviartthomas1cube3dlocalcoefficients.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_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/a00245_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: raviartthomas1cube3dlocalbasis.hh Source File │ │ │ │ +dune-localfunctions: raviartthomas1cube3dlocalcoefficients.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -74,638 +74,81 @@ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ -
raviartthomas1cube3dlocalbasis.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_RAVIARTTHOMAS1_CUBE3D_LOCALBASIS_HH
│ │ │ │ -
6#define DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS1_CUBE3D_LOCALBASIS_HH
│ │ │ │ +
5#ifndef DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS1_CUBE3D_LOCALCOEFFICIENTS_HH
│ │ │ │ +
6#define DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS1_CUBE3D_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;
│ │ │ │ -
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 };
│ │ │ │ +
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 };
│ │ │ │
│ │ │ │ -
624}
│ │ │ │ -
625#endif // DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS1_CUBE3D_LOCALBASIS_HH
│ │ │ │ +
59}
│ │ │ │ +
60#endif // DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS1_CUBE3D_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 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 {} │ │ │ │ │ @@ -2,757 +2,82 @@ │ │ │ │ │ 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 │ │ │ │ │ +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_RAVIARTTHOMAS1_CUBE3D_LOCALBASIS_HH │ │ │ │ │ -6#define DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS1_CUBE3D_LOCALBASIS_HH │ │ │ │ │ +5#ifndef DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS1_CUBE3D_LOCALCOEFFICIENTS_HH │ │ │ │ │ +6#define DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS1_CUBE3D_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; │ │ │ │ │ -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 │ │ │ │ │ +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_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_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 │ │ │ │ │ =============================================================================== │ │ │ │ │ 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: raviartthomas0cube3dall.hh File Reference │ │ │ │ +dune-localfunctions: raviartthomas1cube3dlocalinterpolation.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -65,40 +65,33 @@ │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ Classes | │ │ │ │ Namespaces
│ │ │ │ -
raviartthomas0cube3dall.hh File Reference
│ │ │ │ +
raviartthomas1cube3dlocalinterpolation.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 <vector>
│ │ │ │ +#include <dune/geometry/quadraturerules.hh>
│ │ │ │
│ │ │ │

Go to the source code of this file.

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

│ │ │ │ Classes

class  Dune::RT0Cube3DLocalBasis< D, R >
 
class  Dune::RT0Cube3DLocalInterpolation< LB >
 
class  Dune::RT0Cube3DLocalCoefficients
class  Dune::RT1Cube3DLocalInterpolation< LB >
 First order Raviart-Thomas shape functions on the reference hexahedron. 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 │ │ │ │ │ + * _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 │ │ │ │ │ -raviartthomas0cube3dall.hh File Reference │ │ │ │ │ -#include │ │ │ │ │ -#include │ │ │ │ │ +raviartthomas1cube3dlocalinterpolation.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> │ │ │ │ │ -#include <_d_u_n_e_/_l_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_:_:_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_:_:_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 │ │ │ │ │   │ │ │ │ │ =============================================================================== │ │ │ │ │ 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: raviartthomas0cube3dall.hh Source File │ │ │ │ +dune-localfunctions: raviartthomas1cube3dlocalinterpolation.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -70,278 +70,154 @@ │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
raviartthomas0cube3dall.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_RAVIARTTHOMAS0_CUBE3D_ALL_HH
│ │ │ │ -
6#define DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS0_CUBE3D_ALL_HH
│ │ │ │ +
5#ifndef DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS1_CUBE3D_LOCALINTERPOLATION_HH
│ │ │ │ +
6#define DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS1_CUBE3D_LOCALINTERPOLATION_HH
│ │ │ │
7
│ │ │ │ -
8#include <cstddef>
│ │ │ │ -
9#include <numeric>
│ │ │ │ -
10#include <vector>
│ │ │ │ +
8#include <vector>
│ │ │ │ +
9
│ │ │ │ +
10#include <dune/geometry/quadraturerules.hh>
│ │ │ │
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
│ │ │ │ +
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 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;
│ │ │ │ +
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();
│ │ │ │ +
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
│ │ │ │ -
│ │ │ │ -
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 }
│ │ │ │ +
134 }
│ │ │ │
│ │ │ │ -
236
│ │ │ │ -
237 private:
│ │ │ │ -
238 std::vector<LocalKey> li;
│ │ │ │ -
239 };
│ │ │ │ +
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 };
│ │ │ │
│ │ │ │ -
240
│ │ │ │ -
241}
│ │ │ │ -
242#endif // DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS0_CUBE3D_ALL_HH
│ │ │ │ - │ │ │ │ +
143}
│ │ │ │ +
144#endif // DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS1_CUBE3D_LOCALINTERPOLATION_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 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
│ │ │ │ - │ │ │ │ +
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,293 +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 │ │ │ │ │ - * _r_a_v_i_a_r_t_t_h_o_m_a_s_0_c_u_b_e_3_d │ │ │ │ │ -raviartthomas0cube3dall.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_RAVIARTTHOMAS0_CUBE3D_ALL_HH │ │ │ │ │ -6#define DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS0_CUBE3D_ALL_HH │ │ │ │ │ +5#ifndef DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS1_CUBE3D_LOCALINTERPOLATION_HH │ │ │ │ │ +6#define DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS1_CUBE3D_LOCALINTERPOLATION_HH │ │ │ │ │ 7 │ │ │ │ │ -8#include │ │ │ │ │ -9#include │ │ │ │ │ -10#include │ │ │ │ │ +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_/_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 │ │ │ │ │ +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 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; │ │ │ │ │ +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(); │ │ │ │ │ +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 │ │ │ │ │ -_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 │ │ │ │ │ +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_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 │ │ │ │ │ +_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 │ │ │ │ │ -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 │ │ │ │ │ +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/a00251.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: raviartthomas0cube2dall.hh File Reference │ │ │ │ +dune-localfunctions: raviartthomas1cube3dlocalbasis.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -65,40 +65,35 @@ │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ Classes | │ │ │ │ Namespaces
│ │ │ │ -
raviartthomas0cube2dall.hh File Reference
│ │ │ │ +
raviartthomas1cube3dlocalbasis.hh File Reference
│ │ │ │
│ │ │ │
│ │ │ │ -
#include <cstddef>
│ │ │ │ -#include <numeric>
│ │ │ │ +
#include <numeric>
│ │ │ │ #include <vector>
│ │ │ │ #include <dune/common/fmatrix.hh>
│ │ │ │ -#include <dune/localfunctions/common/localbasis.hh>
│ │ │ │ -#include <dune/localfunctions/common/localkey.hh>
│ │ │ │ +#include "../../common/localbasis.hh"
│ │ │ │
│ │ │ │

Go to the source code of this file.

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

│ │ │ │ Classes

class  Dune::RT0Cube2DLocalBasis< D, R >
 
class  Dune::RT0Cube2DLocalInterpolation< LB >
 
class  Dune::RT0Cube2DLocalCoefficients
class  Dune::RT1Cube3DLocalBasis< D, R >
 First order Raviart-Thomas shape functions on the reference hexahedron. 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 │ │ │ │ │ * _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 │ │ │ │ │ + * _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 │ │ │ │ │ -raviartthomas0cube2dall.hh File Reference │ │ │ │ │ -#include │ │ │ │ │ +raviartthomas1cube3dlocalbasis.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_/_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_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_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_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/a00251_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: raviartthomas0cube2dall.hh Source File │ │ │ │ +dune-localfunctions: raviartthomas1cube3dlocalbasis.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -70,249 +70,642 @@ │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
raviartthomas0cube2dall.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_CUBE2D_ALL_HH
│ │ │ │ -
6#define DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS0_CUBE2D_ALL_HH
│ │ │ │ +
5#ifndef DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS1_CUBE3D_LOCALBASIS_HH
│ │ │ │ +
6#define DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS1_CUBE3D_LOCALBASIS_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
│ │ │ │ -
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};
│ │ │ │ +
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 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
│ │ │ │ -
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]};
│ │ │ │ +
│ │ │ │ +
69 unsigned int size () const
│ │ │ │ +
70 {
│ │ │ │ +
71 return 36;
│ │ │ │ +
72 }
│ │ │ │ +
│ │ │ │
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};
│ │ │ │ +
│ │ │ │ +
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 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
│ │ │ │ +
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
│ │ │ │ -
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};
│ │ │ │ +
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 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 }
│ │ │ │ -
│ │ │ │ +
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 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
│ │ │ │ - │ │ │ │ +
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
│ │ │ │
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
│ │ │ │ - │ │ │ │ +
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,264 +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 │ │ │ │ │ - * _r_a_v_i_a_r_t_t_h_o_m_a_s_0_c_u_b_e_2_d │ │ │ │ │ -raviartthomas0cube2dall.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_CUBE2D_ALL_HH │ │ │ │ │ -6#define DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS0_CUBE2D_ALL_HH │ │ │ │ │ +5#ifndef DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS1_CUBE3D_LOCALBASIS_HH │ │ │ │ │ +6#define DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS1_CUBE3D_LOCALBASIS_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#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_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 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])}; │ │ │ │ │ +52 sign2 = -1.0; │ │ │ │ │ +53 } │ │ │ │ │ +54 if (s & 8) │ │ │ │ │ +55 { │ │ │ │ │ +56 sign3 = -1.0; │ │ │ │ │ 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 │ │ │ │ │ +58 if (s & 16) │ │ │ │ │ +59 { │ │ │ │ │ +60 sign4 = -1.0; │ │ │ │ │ +61 } │ │ │ │ │ +62 if (s & 32) │ │ │ │ │ 63 { │ │ │ │ │ -64 out.resize(4); │ │ │ │ │ -65 out[0][0] = {sign_[0], 0}; │ │ │ │ │ -66 out[0][1] = {0, 0}; │ │ │ │ │ +64 sign5 = -1.0; │ │ │ │ │ +65 } │ │ │ │ │ +66 } │ │ │ │ │ 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]}; │ │ │ │ │ +_6_9 unsigned int _s_i_z_e () const │ │ │ │ │ +70 { │ │ │ │ │ +71 return 36; │ │ │ │ │ +72 } │ │ │ │ │ 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 │ │ │ │ │ +_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 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}; │ │ │ │ │ +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 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 │ │ │ │ │ +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 │ │ │ │ │ -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}; │ │ │ │ │ +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 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 } │ │ │ │ │ +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 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 │ │ │ │ │ +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_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 │ │ │ │ │ +_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 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 │ │ │ │ │ +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 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 │ │ │ │ │ +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 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 │ │ │ │ │ +DDeeffiinniittiioonn raviartthomas1cube3dlocalbasis.hh:616 │ │ │ │ │ =============================================================================== │ │ │ │ │ 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: raviartthomas0pyramid.hh File Reference │ │ │ │ +dune-localfunctions: raviartthomas1cube3d.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -72,29 +72,29 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ Classes | │ │ │ │ Namespaces
│ │ │ │ -
raviartthomas0pyramid.hh File Reference
│ │ │ │ +
raviartthomas1cube3d.hh File Reference
│ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │

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::RT1Cube3DLocalFiniteElement< D, R >
 First order Raviart-Thomas shape functions on cubes. More...
 
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ Namespaces

namespace  Dune
 
│ │ │ │ ├── html2text {} │ │ │ │ │ @@ -2,23 +2,23 @@ │ │ │ │ │ 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 │ │ │ │ │ -raviartthomas0pyramid.hh File Reference │ │ │ │ │ +raviartthomas1cube3d.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" │ │ │ │ │ +#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" │ │ │ │ │ _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_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_._._. │ │ │ │ │   │ │ │ │ │ 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: raviartthomas0pyramid.hh Source File │ │ │ │ +dune-localfunctions: raviartthomas1cube3d.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -74,119 +74,119 @@ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ -
raviartthomas0pyramid.hh
│ │ │ │ +
raviartthomas1cube3d.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_LOCALFINITEELEMENT_HH
│ │ │ │ +
6#define DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS1_CUBE3D_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
│ │ │ │ +
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
│ │ │ │ +
65 unsigned int size () const
│ │ │ │
66 {
│ │ │ │
67 return basis.size();
│ │ │ │
68 }
│ │ │ │
│ │ │ │
69
│ │ │ │
│ │ │ │ -
70 static constexpr GeometryType type ()
│ │ │ │ +
70 static constexpr GeometryType type ()
│ │ │ │
71 {
│ │ │ │ -
72 return GeometryTypes::pyramid;
│ │ │ │ +
72 return GeometryTypes::hexahedron;
│ │ │ │
73 }
│ │ │ │
│ │ │ │
74
│ │ │ │
75 private:
│ │ │ │ - │ │ │ │ -
77 RT0PyramidLocalCoefficients coefficients;
│ │ │ │ - │ │ │ │ + │ │ │ │ +
77 RT1Cube3DLocalCoefficients coefficients;
│ │ │ │ + │ │ │ │
79 };
│ │ │ │
│ │ │ │
80}
│ │ │ │ -
81#endif // DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS0_PYRAMID_HH
│ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ +
81#endif // DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS1_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
│ │ │ │ -
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
│ │ │ │ +
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
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,47 +1,47 @@ │ │ │ │ │ dune-localfunctions 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 │ │ │ │ │ +raviartthomas1cube3d.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_LOCALFINITEELEMENT_HH │ │ │ │ │ +6#define DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS1_CUBE3D_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_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" │ │ │ │ │ +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" │ │ │ │ │ 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 │ │ │ │ │ +_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_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; │ │ │ │ │ +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_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 () │ │ │ │ │ +_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_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) : │ │ │ │ │ +_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 │ │ │ │ │ _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; │ │ │ │ │ @@ -60,77 +60,77 @@ │ │ │ │ │ _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; │ │ │ │ │ +72 return GeometryTypes::hexahedron; │ │ │ │ │ 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; │ │ │ │ │ +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_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 │ │ │ │ │ +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 │ │ │ │ │ _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 │ │ │ │ │ +_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 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 │ │ │ │ │ +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 │ │ │ │ │ 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 │ │ │ │ │ +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 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 │ │ │ │ │ +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 │ │ │ │ │ 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 │ │ │ │ │ +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 raviartthomas0pyramidlocalinterpolation.hh:22 │ │ │ │ │ +DDeeffiinniittiioonn raviartthomas1cube3dlocalinterpolation.hh:24 │ │ │ │ │ =============================================================================== │ │ │ │ │ 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: raviartthomas02d.hh File Reference │ │ │ │ +dune-localfunctions: raviartthomas0cube2dall.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -65,36 +65,40 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ Classes | │ │ │ │ Namespaces
│ │ │ │ -
raviartthomas02d.hh File Reference
│ │ │ │ +
raviartthomas0cube2dall.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::RT0Cube2DLocalBasis< D, R >
 
class  Dune::RT0Cube2DLocalInterpolation< LB >
 
class  Dune::RT0Cube2DLocalCoefficients
 
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ 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_2_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" │ │ │ │ │ +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> │ │ │ │ │ _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_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/a00257_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: raviartthomas02d.hh Source File │ │ │ │ +dune-localfunctions: raviartthomas0cube2dall.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -70,125 +70,249 @@ │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
raviartthomas02d.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_RAVIARTTHOMAS02DLOCALFINITEELEMENT_HH
│ │ │ │ -
6#define DUNE_RAVIARTTHOMAS02DLOCALFINITEELEMENT_HH
│ │ │ │ +
5#ifndef DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS0_CUBE2D_ALL_HH
│ │ │ │ +
6#define DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS0_CUBE2D_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 {}
│ │ │ │ +
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 }
│ │ │ │
│ │ │ │ -
37
│ │ │ │ +
41
│ │ │ │
│ │ │ │ -
43 RT02DLocalFiniteElement (std::bitset<3> s) :
│ │ │ │ -
44 basis(s),
│ │ │ │ -
45 interpolation(s)
│ │ │ │ -
46 {}
│ │ │ │ +
43 unsigned int size () const
│ │ │ │ +
44 {
│ │ │ │ +
45 return 4;
│ │ │ │ +
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 }
│ │ │ │ -
│ │ │ │ +
│ │ │ │ +
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 static constexpr GeometryType type ()
│ │ │ │ -
69 {
│ │ │ │ -
70 return GeometryTypes::triangle;
│ │ │ │ -
71 }
│ │ │ │ -
│ │ │ │ -
72
│ │ │ │ -
73 private:
│ │ │ │ - │ │ │ │ -
75 RT02DLocalCoefficients coefficients;
│ │ │ │ - │ │ │ │ -
77 };
│ │ │ │ -
│ │ │ │ -
78
│ │ │ │ -
79}
│ │ │ │ -
80
│ │ │ │ -
81#endif
│ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ +
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 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
│ │ │ │ + │ │ │ │
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 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,134 +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 │ │ │ │ │ -raviartthomas02d.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_RAVIARTTHOMAS02DLOCALFINITEELEMENT_HH │ │ │ │ │ -6#define DUNE_RAVIARTTHOMAS02DLOCALFINITEELEMENT_HH │ │ │ │ │ +5#ifndef DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS0_CUBE2D_ALL_HH │ │ │ │ │ +6#define DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS0_CUBE2D_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 {} │ │ │ │ │ +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_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 } │ │ │ │ │ +_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 │ │ │ │ │ -_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 │ │ │ │ │ +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 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 │ │ │ │ │ _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_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 │ │ │ │ │ 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 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/a00260.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: raviartthomas12dlocalbasis.hh File Reference │ │ │ │ +dune-localfunctions: raviartthomas12dlocalcoefficients.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -72,28 +72,27 @@ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ Classes | │ │ │ │ Namespaces
│ │ │ │ -
raviartthomas12dlocalbasis.hh File Reference
│ │ │ │ +
raviartthomas12dlocalcoefficients.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::RT12DLocalBasis< D, R >
 First order Raviart-Thomas shape functions on the reference triangle. More...
class  Dune::RT12DLocalCoefficients
 Layout map for Raviart-Thomas-1 elements on the reference triangle. More...
 
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ Namespaces

namespace  Dune
 
│ │ │ │ ├── html2text {} │ │ │ │ │ @@ -3,23 +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_2_d │ │ │ │ │ _C_l_a_s_s_e_s | _N_a_m_e_s_p_a_c_e_s │ │ │ │ │ -raviartthomas12dlocalbasis.hh File Reference │ │ │ │ │ -#include │ │ │ │ │ +raviartthomas12dlocalcoefficients.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_2_D_L_o_c_a_l_B_a_s_i_s_<_ _D_,_ _R_ _> │ │ │ │ │ -  First order Raviart-Thomas shape functions on the reference triangle. │ │ │ │ │ +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/a00260_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: raviartthomas12dlocalbasis.hh Source File │ │ │ │ +dune-localfunctions: raviartthomas12dlocalcoefficients.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -74,211 +74,78 @@ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ -
raviartthomas12dlocalbasis.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_RAVIARTTHOMAS12DLOCALBASIS_HH
│ │ │ │ -
6#define DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS12DLOCALBASIS_HH
│ │ │ │ +
5#ifndef DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS12DLOCALCOEFFICIENTS_HH
│ │ │ │ +
6#define DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS12DLOCALCOEFFICIENTS_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,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);
│ │ │ │ -
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 };
│ │ │ │ +
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 }
│ │ │ │ +
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 };
│ │ │ │
│ │ │ │ -
197}
│ │ │ │ -
198#endif // DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS12DLOCALBASIS_HH
│ │ │ │ +
55}
│ │ │ │ +
56#endif // DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS12DLOCALCOEFFICIENTS_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
│ │ │ │ +
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 {} │ │ │ │ │ @@ -2,227 +2,79 @@ │ │ │ │ │ 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 │ │ │ │ │ +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_RAVIARTTHOMAS12DLOCALBASIS_HH │ │ │ │ │ -6#define DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS12DLOCALBASIS_HH │ │ │ │ │ +5#ifndef DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS12DLOCALCOEFFICIENTS_HH │ │ │ │ │ +6#define DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS12DLOCALCOEFFICIENTS_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_2_D_L_o_c_a_l_B_a_s_i_s │ │ │ │ │ +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 │ │ │ │ │ -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_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); │ │ │ │ │ -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 │ │ │ │ │ +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_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 │ │ │ │ │ -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 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 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 │ │ │ │ │ +_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_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 │ │ │ │ │ =============================================================================== │ │ │ │ │ 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: raviartthomas12dlocalinterpolation.hh File Reference │ │ │ │ +dune-localfunctions: raviartthomas12dlocalbasis.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -72,26 +72,28 @@ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │
│ │ │ │
│ │ │ │ Classes | │ │ │ │ Namespaces
│ │ │ │ -
raviartthomas12dlocalinterpolation.hh File Reference
│ │ │ │ +
raviartthomas12dlocalbasis.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::RT12DLocalInterpolation< LB >
 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 {} │ │ │ │ │ @@ -3,21 +3,23 @@ │ │ │ │ │ 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 │ │ │ │ │ -raviartthomas12dlocalinterpolation.hh File Reference │ │ │ │ │ +raviartthomas12dlocalbasis.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_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_._._. │ │ │ │ │ +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/a00263_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: raviartthomas12dlocalinterpolation.hh Source File │ │ │ │ +dune-localfunctions: raviartthomas12dlocalbasis.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -74,120 +74,211 @@ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ -
raviartthomas12dlocalinterpolation.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_RAVIARTTHOMAS12DLOCALINTERPOLATION_HH
│ │ │ │ -
6#define DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS12DLOCALINTERPOLATION_HH
│ │ │ │ +
5#ifndef DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS12DLOCALBASIS_HH
│ │ │ │ +
6#define DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS12DLOCALBASIS_HH
│ │ │ │
7
│ │ │ │ -
8#include <vector>
│ │ │ │ -
9
│ │ │ │ -
10#include <dune/geometry/quadraturerules.hh>
│ │ │ │ -
11
│ │ │ │ -
12namespace Dune
│ │ │ │ -
13{
│ │ │ │ +
8#include <numeric>
│ │ │ │ +
9#include <vector>
│ │ │ │ +
10
│ │ │ │ +
11#include <dune/common/fmatrix.hh>
│ │ │ │ +
12
│ │ │ │ +
13#include "../../common/localbasis.hh"
│ │ │ │
14
│ │ │ │ -
23 template<class LB>
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
25 {
│ │ │ │ -
26
│ │ │ │ -
27 public:
│ │ │ │ -
28
│ │ │ │ -
│ │ │ │ -
34 RT12DLocalInterpolation (std::bitset<3> s = 0)
│ │ │ │ -
35 {
│ │ │ │ -
36 using std::sqrt;
│ │ │ │ -
37 for (size_t i=0; i<3; i++)
│ │ │ │ -
38 sign_[i] = (s[i]) ? -1.0 : 1.0;
│ │ │ │ -
39
│ │ │ │ -
40 n_[0] = { 0.0, -1.0};
│ │ │ │ -
41 n_[1] = {-1.0, 0.0};
│ │ │ │ -
42 n_[2] = { 1.0/sqrt(2.0), 1.0/sqrt(2.0)};
│ │ │ │ -
43
│ │ │ │ -
44 c_ = { 0.5*n_[0][0] - 1.0*n_[0][1],
│ │ │ │ -
45 -1.0*n_[1][0] + 0.5*n_[1][1],
│ │ │ │ -
46 0.5*n_[2][0] + 0.5*n_[2][1]};
│ │ │ │ -
47 }
│ │ │ │ -
│ │ │ │ -
48
│ │ │ │ -
57 template<typename F, typename C>
│ │ │ │ -
│ │ │ │ -
58 void interpolate (const F& f, std::vector<C>& out) const
│ │ │ │ +
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 // f gives v*outer normal at a point on the edge!
│ │ │ │ -
61 typedef typename LB::Traits::RangeFieldType Scalar;
│ │ │ │ -
62 typedef typename LB::Traits::DomainFieldType Vector;
│ │ │ │ -
63
│ │ │ │ -
64 out.resize(8);
│ │ │ │ -
65 fill(out.begin(), out.end(), 0.0);
│ │ │ │ -
66
│ │ │ │ -
67 const int qOrder1 = 4;
│ │ │ │ -
68 const auto& rule1 = Dune::QuadratureRules<Scalar,1>::rule(Dune::GeometryTypes::simplex(1), qOrder1);
│ │ │ │ -
69
│ │ │ │ -
70 for (auto&& qp : rule1)
│ │ │ │ -
71 {
│ │ │ │ -
72 Scalar qPos = qp.position();
│ │ │ │ -
73 typename LB::Traits::DomainType localPos;
│ │ │ │ -
74
│ │ │ │ -
75 localPos = {qPos, 0.0};
│ │ │ │ -
76 auto y = f(localPos);
│ │ │ │ -
77 out[0] += (y[0]*n_[0][0] + y[1]*n_[0][1])*qp.weight()*sign_[0]/c_[0];
│ │ │ │ -
78 out[3] += (y[0]*n_[0][0] + y[1]*n_[0][1])*(2.0*qPos - 1.0)*qp.weight()/c_[0];
│ │ │ │ -
79
│ │ │ │ -
80 localPos = {0.0, qPos};
│ │ │ │ -
81 y = f(localPos);
│ │ │ │ -
82 out[1] += (y[0]*n_[1][0] + y[1]*n_[1][1])*qp.weight()*sign_[1]/c_[1];
│ │ │ │ -
83 out[4] += (y[0]*n_[1][0] + y[1]*n_[1][1])*(1.0 - 2.0*qPos)*qp.weight()/c_[1];
│ │ │ │ -
84
│ │ │ │ -
85 localPos = {1.0 - qPos, qPos};
│ │ │ │ -
86 y = f(localPos);
│ │ │ │ -
87 out[2] += (y[0]*n_[2][0] + y[1]*n_[2][1])*qp.weight()*sign_[2]/c_[2];
│ │ │ │ -
88 out[5] += (y[0]*n_[2][0] + y[1]*n_[2][1])*(2.0*qPos - 1.0)*qp.weight()/c_[2];
│ │ │ │ -
89 }
│ │ │ │ -
90
│ │ │ │ -
91 const int qOrder2 = 8;
│ │ │ │ -
92 const auto& rule2 = Dune::QuadratureRules<Vector,2>::rule(Dune::GeometryTypes::simplex(2), qOrder2);
│ │ │ │ -
93
│ │ │ │ -
94 for (auto&& qp : rule2)
│ │ │ │ -
95 {
│ │ │ │ -
96 auto qPos = qp.position();
│ │ │ │ -
97
│ │ │ │ -
98 auto y = f(qPos);
│ │ │ │ -
99 out[6] += y[0]*qp.weight();
│ │ │ │ -
100 out[7] += y[1]*qp.weight();
│ │ │ │ -
101 }
│ │ │ │ -
102 }
│ │ │ │ -
│ │ │ │ -
103
│ │ │ │ -
104 private:
│ │ │ │ -
105 // Edge orientations
│ │ │ │ -
106 std::array<typename LB::Traits::RangeFieldType, 3> sign_;
│ │ │ │ -
107
│ │ │ │ -
108 // Edge normals
│ │ │ │ -
109 std::array<typename LB::Traits::DomainType, 3> n_;
│ │ │ │ -
110
│ │ │ │ -
111 std::array<typename LB::Traits::RangeFieldType, 3> c_;
│ │ │ │ -
112 };
│ │ │ │ +
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 };
│ │ │ │
│ │ │ │ -
113}
│ │ │ │ -
114#endif // DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS12DLOCALINTERPOLATION_HH
│ │ │ │ +
197}
│ │ │ │ +
198#endif // DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS12DLOCALBASIS_HH
│ │ │ │
Definition bdfmcube.hh:18
│ │ │ │ -
First order Raviart-Thomas shape functions on the reference quadrilateral.
Definition raviartthomas12dlocalinterpolation.hh:25
│ │ │ │ -
void interpolate(const F &f, std::vector< C > &out) const
Interpolate a given function with shape functions.
Definition raviartthomas12dlocalinterpolation.hh:58
│ │ │ │ -
RT12DLocalInterpolation(std::bitset< 3 > s=0)
Make set number s, where 0 <= s < 8.
Definition raviartthomas12dlocalinterpolation.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 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 {} │ │ │ │ │ @@ -2,123 +2,227 @@ │ │ │ │ │ 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 │ │ │ │ │ -raviartthomas12dlocalinterpolation.hh │ │ │ │ │ +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_RAVIARTTHOMAS12DLOCALINTERPOLATION_HH │ │ │ │ │ -6#define DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS12DLOCALINTERPOLATION_HH │ │ │ │ │ +5#ifndef DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS12DLOCALBASIS_HH │ │ │ │ │ +6#define DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS12DLOCALBASIS_HH │ │ │ │ │ 7 │ │ │ │ │ -8#include │ │ │ │ │ -9 │ │ │ │ │ -10#include │ │ │ │ │ -11 │ │ │ │ │ -12namespace _D_u_n_e │ │ │ │ │ -13{ │ │ │ │ │ +8#include │ │ │ │ │ +9#include │ │ │ │ │ +10 │ │ │ │ │ +11#include │ │ │ │ │ +12 │ │ │ │ │ +13#include "../../common/localbasis.hh" │ │ │ │ │ 14 │ │ │ │ │ -23 template │ │ │ │ │ -_2_4 class _R_T_1_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_1_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) │ │ │ │ │ -35 { │ │ │ │ │ -36 using std::sqrt; │ │ │ │ │ -37 for (size_t i=0; i<3; i++) │ │ │ │ │ -38 sign_[i] = (s[i]) ? -1.0 : 1.0; │ │ │ │ │ -39 │ │ │ │ │ -40 n_[0] = { 0.0, -1.0}; │ │ │ │ │ -41 n_[1] = {-1.0, 0.0}; │ │ │ │ │ -42 n_[2] = { 1.0/sqrt(2.0), 1.0/sqrt(2.0)}; │ │ │ │ │ -43 │ │ │ │ │ -44 c_ = { 0.5*n_[0][0] - 1.0*n_[0][1], │ │ │ │ │ -45 -1.0*n_[1][0] + 0.5*n_[1][1], │ │ │ │ │ -46 0.5*n_[2][0] + 0.5*n_[2][1]}; │ │ │ │ │ -47 } │ │ │ │ │ -48 │ │ │ │ │ -57 template │ │ │ │ │ -_5_8 void _i_n_t_e_r_p_o_l_a_t_e (const F& f, std::vector& out) const │ │ │ │ │ +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:: │ │ │ │ │ +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 // f gives v*outer normal at a point on the edge! │ │ │ │ │ -61 typedef typename LB::Traits::RangeFieldType Scalar; │ │ │ │ │ -62 typedef typename LB::Traits::DomainFieldType Vector; │ │ │ │ │ -63 │ │ │ │ │ -64 out.resize(8); │ │ │ │ │ -65 fill(out.begin(), out.end(), 0.0); │ │ │ │ │ -66 │ │ │ │ │ -67 const int qOrder1 = 4; │ │ │ │ │ -68 const auto& rule1 = Dune::QuadratureRules::rule(Dune:: │ │ │ │ │ -GeometryTypes::simplex(1), qOrder1); │ │ │ │ │ -69 │ │ │ │ │ -70 for (auto&& qp : rule1) │ │ │ │ │ -71 { │ │ │ │ │ -72 Scalar qPos = qp.position(); │ │ │ │ │ -73 typename LB::Traits::DomainType localPos; │ │ │ │ │ -74 │ │ │ │ │ -75 localPos = {qPos, 0.0}; │ │ │ │ │ -76 auto y = f(localPos); │ │ │ │ │ -77 out[0] += (y[0]*n_[0][0] + y[1]*n_[0][1])*qp.weight()*sign_[0]/c_[0]; │ │ │ │ │ -78 out[3] += (y[0]*n_[0][0] + y[1]*n_[0][1])*(2.0*qPos - 1.0)*qp.weight()/c_ │ │ │ │ │ +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]; │ │ │ │ │ -79 │ │ │ │ │ -80 localPos = {0.0, qPos}; │ │ │ │ │ -81 y = f(localPos); │ │ │ │ │ -82 out[1] += (y[0]*n_[1][0] + y[1]*n_[1][1])*qp.weight()*sign_[1]/c_[1]; │ │ │ │ │ -83 out[4] += (y[0]*n_[1][0] + y[1]*n_[1][1])*(1.0 - 2.0*qPos)*qp.weight()/c_ │ │ │ │ │ -[1]; │ │ │ │ │ -84 │ │ │ │ │ -85 localPos = {1.0 - qPos, qPos}; │ │ │ │ │ -86 y = f(localPos); │ │ │ │ │ -87 out[2] += (y[0]*n_[2][0] + y[1]*n_[2][1])*qp.weight()*sign_[2]/c_[2]; │ │ │ │ │ -88 out[5] += (y[0]*n_[2][0] + y[1]*n_[2][1])*(2.0*qPos - 1.0)*qp.weight()/c_ │ │ │ │ │ -[2]; │ │ │ │ │ -89 } │ │ │ │ │ -90 │ │ │ │ │ -91 const int qOrder2 = 8; │ │ │ │ │ -92 const auto& rule2 = Dune::QuadratureRules::rule(Dune:: │ │ │ │ │ -GeometryTypes::simplex(2), qOrder2); │ │ │ │ │ -93 │ │ │ │ │ -94 for (auto&& qp : rule2) │ │ │ │ │ -95 { │ │ │ │ │ -96 auto qPos = qp.position(); │ │ │ │ │ -97 │ │ │ │ │ -98 auto y = f(qPos); │ │ │ │ │ -99 out[6] += y[0]*qp.weight(); │ │ │ │ │ -100 out[7] += y[1]*qp.weight(); │ │ │ │ │ -101 } │ │ │ │ │ -102 } │ │ │ │ │ -103 │ │ │ │ │ -104 private: │ │ │ │ │ -105 // Edge orientations │ │ │ │ │ -106 std::array sign_; │ │ │ │ │ -107 │ │ │ │ │ -108 // Edge normals │ │ │ │ │ -109 std::array n_; │ │ │ │ │ -110 │ │ │ │ │ -111 std::array c_; │ │ │ │ │ -112 }; │ │ │ │ │ -113} │ │ │ │ │ -114#endif // DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS12DLOCALINTERPOLATION_HH │ │ │ │ │ +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_:_:_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 │ │ │ │ │ -_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_:_:_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 raviartthomas12dlocalinterpolation.hh:58 │ │ │ │ │ -_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_:_:_R_T_1_2_D_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ -RT12DLocalInterpolation(std::bitset< 3 > s=0) │ │ │ │ │ +_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 raviartthomas12dlocalinterpolation.hh:34 │ │ │ │ │ +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 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 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 │ │ │ │ │ =============================================================================== │ │ │ │ │ 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: raviartthomas12dlocalcoefficients.hh File Reference │ │ │ │ +dune-localfunctions: raviartthomas12dlocalinterpolation.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -72,27 +72,26 @@ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │
│ │ │ │
│ │ │ │ Classes | │ │ │ │ Namespaces
│ │ │ │ -
raviartthomas12dlocalcoefficients.hh File Reference
│ │ │ │ +
raviartthomas12dlocalinterpolation.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::RT12DLocalCoefficients
 Layout map for Raviart-Thomas-1 elements on the reference triangle. More...
class  Dune::RT12DLocalInterpolation< LB >
 First order Raviart-Thomas shape functions on the reference quadrilateral. More...
 
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ Namespaces

namespace  Dune
 
│ │ │ │ ├── html2text {} │ │ │ │ │ @@ -3,22 +3,21 @@ │ │ │ │ │ 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 │ │ │ │ │ +raviartthomas12dlocalinterpolation.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_:_:_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_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/a00266_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: raviartthomas12dlocalcoefficients.hh Source File │ │ │ │ +dune-localfunctions: raviartthomas12dlocalinterpolation.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -74,78 +74,120 @@ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ -
raviartthomas12dlocalcoefficients.hh
│ │ │ │ +
raviartthomas12dlocalinterpolation.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_RAVIARTTHOMAS12DLOCALINTERPOLATION_HH
│ │ │ │ +
6#define DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS12DLOCALINTERPOLATION_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 }
│ │ │ │ -
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 }
│ │ │ │ -
│ │ │ │ +
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 RT12DLocalInterpolation (std::bitset<3> s = 0)
│ │ │ │ +
35 {
│ │ │ │ +
36 using std::sqrt;
│ │ │ │ +
37 for (size_t i=0; i<3; i++)
│ │ │ │ +
38 sign_[i] = (s[i]) ? -1.0 : 1.0;
│ │ │ │
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 };
│ │ │ │ +
40 n_[0] = { 0.0, -1.0};
│ │ │ │ +
41 n_[1] = {-1.0, 0.0};
│ │ │ │ +
42 n_[2] = { 1.0/sqrt(2.0), 1.0/sqrt(2.0)};
│ │ │ │ +
43
│ │ │ │ +
44 c_ = { 0.5*n_[0][0] - 1.0*n_[0][1],
│ │ │ │ +
45 -1.0*n_[1][0] + 0.5*n_[1][1],
│ │ │ │ +
46 0.5*n_[2][0] + 0.5*n_[2][1]};
│ │ │ │ +
47 }
│ │ │ │ +
│ │ │ │ +
48
│ │ │ │ +
57 template<typename F, typename C>
│ │ │ │ +
│ │ │ │ +
58 void interpolate (const F& f, std::vector<C>& out) const
│ │ │ │ +
59 {
│ │ │ │ +
60 // f gives v*outer normal at a point on the edge!
│ │ │ │ +
61 typedef typename LB::Traits::RangeFieldType Scalar;
│ │ │ │ +
62 typedef typename LB::Traits::DomainFieldType Vector;
│ │ │ │ +
63
│ │ │ │ +
64 out.resize(8);
│ │ │ │ +
65 fill(out.begin(), out.end(), 0.0);
│ │ │ │ +
66
│ │ │ │ +
67 const int qOrder1 = 4;
│ │ │ │ +
68 const auto& rule1 = Dune::QuadratureRules<Scalar,1>::rule(Dune::GeometryTypes::simplex(1), qOrder1);
│ │ │ │ +
69
│ │ │ │ +
70 for (auto&& qp : rule1)
│ │ │ │ +
71 {
│ │ │ │ +
72 Scalar qPos = qp.position();
│ │ │ │ +
73 typename LB::Traits::DomainType localPos;
│ │ │ │ +
74
│ │ │ │ +
75 localPos = {qPos, 0.0};
│ │ │ │ +
76 auto y = f(localPos);
│ │ │ │ +
77 out[0] += (y[0]*n_[0][0] + y[1]*n_[0][1])*qp.weight()*sign_[0]/c_[0];
│ │ │ │ +
78 out[3] += (y[0]*n_[0][0] + y[1]*n_[0][1])*(2.0*qPos - 1.0)*qp.weight()/c_[0];
│ │ │ │ +
79
│ │ │ │ +
80 localPos = {0.0, qPos};
│ │ │ │ +
81 y = f(localPos);
│ │ │ │ +
82 out[1] += (y[0]*n_[1][0] + y[1]*n_[1][1])*qp.weight()*sign_[1]/c_[1];
│ │ │ │ +
83 out[4] += (y[0]*n_[1][0] + y[1]*n_[1][1])*(1.0 - 2.0*qPos)*qp.weight()/c_[1];
│ │ │ │ +
84
│ │ │ │ +
85 localPos = {1.0 - qPos, qPos};
│ │ │ │ +
86 y = f(localPos);
│ │ │ │ +
87 out[2] += (y[0]*n_[2][0] + y[1]*n_[2][1])*qp.weight()*sign_[2]/c_[2];
│ │ │ │ +
88 out[5] += (y[0]*n_[2][0] + y[1]*n_[2][1])*(2.0*qPos - 1.0)*qp.weight()/c_[2];
│ │ │ │ +
89 }
│ │ │ │ +
90
│ │ │ │ +
91 const int qOrder2 = 8;
│ │ │ │ +
92 const auto& rule2 = Dune::QuadratureRules<Vector,2>::rule(Dune::GeometryTypes::simplex(2), qOrder2);
│ │ │ │ +
93
│ │ │ │ +
94 for (auto&& qp : rule2)
│ │ │ │ +
95 {
│ │ │ │ +
96 auto qPos = qp.position();
│ │ │ │ +
97
│ │ │ │ +
98 auto y = f(qPos);
│ │ │ │ +
99 out[6] += y[0]*qp.weight();
│ │ │ │ +
100 out[7] += y[1]*qp.weight();
│ │ │ │ +
101 }
│ │ │ │ +
102 }
│ │ │ │ +
│ │ │ │ +
103
│ │ │ │ +
104 private:
│ │ │ │ +
105 // Edge orientations
│ │ │ │ +
106 std::array<typename LB::Traits::RangeFieldType, 3> sign_;
│ │ │ │ +
107
│ │ │ │ +
108 // Edge normals
│ │ │ │ +
109 std::array<typename LB::Traits::DomainType, 3> n_;
│ │ │ │ +
110
│ │ │ │ +
111 std::array<typename LB::Traits::RangeFieldType, 3> c_;
│ │ │ │ +
112 };
│ │ │ │
│ │ │ │ -
55}
│ │ │ │ -
56#endif // DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS12DLOCALCOEFFICIENTS_HH
│ │ │ │ +
113}
│ │ │ │ +
114#endif // DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS12DLOCALINTERPOLATION_HH
│ │ │ │
Definition bdfmcube.hh:18
│ │ │ │ -
Describe position of one degree of freedom.
Definition localkey.hh:24
│ │ │ │ -
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
│ │ │ │ +
void interpolate(const F &f, std::vector< C > &out) const
Interpolate a given function with shape functions.
Definition raviartthomas12dlocalinterpolation.hh:58
│ │ │ │ +
RT12DLocalInterpolation(std::bitset< 3 > s=0)
Make set number s, where 0 <= s < 8.
Definition raviartthomas12dlocalinterpolation.hh:34
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -2,79 +2,123 @@ │ │ │ │ │ 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 │ │ │ │ │ +raviartthomas12dlocalinterpolation.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_RAVIARTTHOMAS12DLOCALINTERPOLATION_HH │ │ │ │ │ +6#define DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS12DLOCALINTERPOLATION_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 } │ │ │ │ │ -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 } │ │ │ │ │ +8#include │ │ │ │ │ +9 │ │ │ │ │ +10#include │ │ │ │ │ +11 │ │ │ │ │ +12namespace _D_u_n_e │ │ │ │ │ +13{ │ │ │ │ │ +14 │ │ │ │ │ +23 template │ │ │ │ │ +_2_4 class _R_T_1_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_1_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) │ │ │ │ │ +35 { │ │ │ │ │ +36 using std::sqrt; │ │ │ │ │ +37 for (size_t i=0; i<3; i++) │ │ │ │ │ +38 sign_[i] = (s[i]) ? -1.0 : 1.0; │ │ │ │ │ 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 │ │ │ │ │ +40 n_[0] = { 0.0, -1.0}; │ │ │ │ │ +41 n_[1] = {-1.0, 0.0}; │ │ │ │ │ +42 n_[2] = { 1.0/sqrt(2.0), 1.0/sqrt(2.0)}; │ │ │ │ │ +43 │ │ │ │ │ +44 c_ = { 0.5*n_[0][0] - 1.0*n_[0][1], │ │ │ │ │ +45 -1.0*n_[1][0] + 0.5*n_[1][1], │ │ │ │ │ +46 0.5*n_[2][0] + 0.5*n_[2][1]}; │ │ │ │ │ +47 } │ │ │ │ │ +48 │ │ │ │ │ +57 template │ │ │ │ │ +_5_8 void _i_n_t_e_r_p_o_l_a_t_e (const F& f, std::vector& out) const │ │ │ │ │ +59 { │ │ │ │ │ +60 // f gives v*outer normal at a point on the edge! │ │ │ │ │ +61 typedef typename LB::Traits::RangeFieldType Scalar; │ │ │ │ │ +62 typedef typename LB::Traits::DomainFieldType Vector; │ │ │ │ │ +63 │ │ │ │ │ +64 out.resize(8); │ │ │ │ │ +65 fill(out.begin(), out.end(), 0.0); │ │ │ │ │ +66 │ │ │ │ │ +67 const int qOrder1 = 4; │ │ │ │ │ +68 const auto& rule1 = Dune::QuadratureRules::rule(Dune:: │ │ │ │ │ +GeometryTypes::simplex(1), qOrder1); │ │ │ │ │ +69 │ │ │ │ │ +70 for (auto&& qp : rule1) │ │ │ │ │ +71 { │ │ │ │ │ +72 Scalar qPos = qp.position(); │ │ │ │ │ +73 typename LB::Traits::DomainType localPos; │ │ │ │ │ +74 │ │ │ │ │ +75 localPos = {qPos, 0.0}; │ │ │ │ │ +76 auto y = f(localPos); │ │ │ │ │ +77 out[0] += (y[0]*n_[0][0] + y[1]*n_[0][1])*qp.weight()*sign_[0]/c_[0]; │ │ │ │ │ +78 out[3] += (y[0]*n_[0][0] + y[1]*n_[0][1])*(2.0*qPos - 1.0)*qp.weight()/c_ │ │ │ │ │ +[0]; │ │ │ │ │ +79 │ │ │ │ │ +80 localPos = {0.0, qPos}; │ │ │ │ │ +81 y = f(localPos); │ │ │ │ │ +82 out[1] += (y[0]*n_[1][0] + y[1]*n_[1][1])*qp.weight()*sign_[1]/c_[1]; │ │ │ │ │ +83 out[4] += (y[0]*n_[1][0] + y[1]*n_[1][1])*(1.0 - 2.0*qPos)*qp.weight()/c_ │ │ │ │ │ +[1]; │ │ │ │ │ +84 │ │ │ │ │ +85 localPos = {1.0 - qPos, qPos}; │ │ │ │ │ +86 y = f(localPos); │ │ │ │ │ +87 out[2] += (y[0]*n_[2][0] + y[1]*n_[2][1])*qp.weight()*sign_[2]/c_[2]; │ │ │ │ │ +88 out[5] += (y[0]*n_[2][0] + y[1]*n_[2][1])*(2.0*qPos - 1.0)*qp.weight()/c_ │ │ │ │ │ +[2]; │ │ │ │ │ +89 } │ │ │ │ │ +90 │ │ │ │ │ +91 const int qOrder2 = 8; │ │ │ │ │ +92 const auto& rule2 = Dune::QuadratureRules::rule(Dune:: │ │ │ │ │ +GeometryTypes::simplex(2), qOrder2); │ │ │ │ │ +93 │ │ │ │ │ +94 for (auto&& qp : rule2) │ │ │ │ │ +95 { │ │ │ │ │ +96 auto qPos = qp.position(); │ │ │ │ │ +97 │ │ │ │ │ +98 auto y = f(qPos); │ │ │ │ │ +99 out[6] += y[0]*qp.weight(); │ │ │ │ │ +100 out[7] += y[1]*qp.weight(); │ │ │ │ │ +101 } │ │ │ │ │ +102 } │ │ │ │ │ +103 │ │ │ │ │ +104 private: │ │ │ │ │ +105 // Edge orientations │ │ │ │ │ +106 std::array sign_; │ │ │ │ │ +107 │ │ │ │ │ +108 // Edge normals │ │ │ │ │ +109 std::array n_; │ │ │ │ │ +110 │ │ │ │ │ +111 std::array c_; │ │ │ │ │ +112 }; │ │ │ │ │ +113} │ │ │ │ │ +114#endif // DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS12DLOCALINTERPOLATION_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_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 │ │ │ │ │ +_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_:_:_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 raviartthomas12dlocalinterpolation.hh:58 │ │ │ │ │ +_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_:_:_R_T_1_2_D_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ +RT12DLocalInterpolation(std::bitset< 3 > s=0) │ │ │ │ │ +Make set number s, where 0 <= s < 8. │ │ │ │ │ +DDeeffiinniittiioonn raviartthomas12dlocalinterpolation.hh:34 │ │ │ │ │ =============================================================================== │ │ │ │ │ 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: raviartthomas3cube2dlocalinterpolation.hh File Reference │ │ │ │ +dune-localfunctions: raviartthomas0prismlocalcoefficients.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -65,33 +65,34 @@ │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ Classes | │ │ │ │ Namespaces
│ │ │ │ -
raviartthomas3cube2dlocalinterpolation.hh File Reference
│ │ │ │ +
raviartthomas0prismlocalcoefficients.hh File Reference
│ │ │ │
│ │ │ │
│ │ │ │ -
#include <vector>
│ │ │ │ -#include <dune/geometry/quadraturerules.hh>
│ │ │ │ +
#include <cstddef>
│ │ │ │ +#include <vector>
│ │ │ │ +#include "../../common/localkey.hh"
│ │ │ │
│ │ │ │

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::RT0PrismLocalCoefficients
 Layout map for Raviart-Thomas-1 elements on prisms. 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_3_c_u_b_e_2_d │ │ │ │ │ + * _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 │ │ │ │ │ -raviartthomas3cube2dlocalinterpolation.hh File Reference │ │ │ │ │ +raviartthomas0prismlocalcoefficients.hh File Reference │ │ │ │ │ +#include │ │ │ │ │ #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_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_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/a00269_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: raviartthomas3cube2dlocalinterpolation.hh Source File │ │ │ │ +dune-localfunctions: raviartthomas0prismlocalcoefficients.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -70,163 +70,75 @@ │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
raviartthomas3cube2dlocalinterpolation.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_RAVIARTTHOMAS3_CUBE2D_LOCALINTERPOLATION_HH
│ │ │ │ -
6#define DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS3_CUBE2D_LOCALINTERPOLATION_HH
│ │ │ │ +
5#ifndef DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS0_PRISM_LOCALCOEFFICIENTS_HH
│ │ │ │ +
6#define DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS0_PRISM_LOCALCOEFFICIENTS_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};
│ │ │ │ -
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;
│ │ │ │ -
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
│ │ │ │ +
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
│ │ │ │
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
│ │ │ │ +
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,170 +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_3_c_u_b_e_2_d │ │ │ │ │ -raviartthomas3cube2dlocalinterpolation.hh │ │ │ │ │ + * _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_RAVIARTTHOMAS3_CUBE2D_LOCALINTERPOLATION_HH │ │ │ │ │ -6#define DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS3_CUBE2D_LOCALINTERPOLATION_HH │ │ │ │ │ +5#ifndef DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS0_PRISM_LOCALCOEFFICIENTS_HH │ │ │ │ │ +6#define DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS0_PRISM_LOCALCOEFFICIENTS_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}; │ │ │ │ │ -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(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; │ │ │ │ │ -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 │ │ │ │ │ +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 │ │ │ │ │ _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 │ │ │ │ │ -void interpolate(const F &f, std::vector< C > &out) const │ │ │ │ │ -Interpolate a given function with shape functions. │ │ │ │ │ -DDeeffiinniittiioonn raviartthomas3cube2dlocalinterpolation.hh:54 │ │ │ │ │ +_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/a00272.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: raviartthomas3cube2dlocalbasis.hh File Reference │ │ │ │ +dune-localfunctions: raviartthomas0prismlocalbasis.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -65,36 +65,35 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ Classes | │ │ │ │ Namespaces
│ │ │ │ -
raviartthomas3cube2dlocalbasis.hh File Reference
│ │ │ │ +
raviartthomas0prismlocalbasis.hh File Reference
│ │ │ │
│ │ │ │
│ │ │ │ -
#include <bitset>
│ │ │ │ -#include <numeric>
│ │ │ │ +
#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::RT3Cube2DLocalBasis< D, R >
 Second order Raviart-Thomas shape functions on the reference quadrilateral. More...
class  Dune::RT0PrismLocalBasis< D, R >
 First order Raviart-Thomas shape functions on the reference prism. More...
 
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ Namespaces

namespace  Dune
 
│ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,26 +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_3_c_u_b_e_2_d │ │ │ │ │ + * _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 │ │ │ │ │ -raviartthomas3cube2dlocalbasis.hh File Reference │ │ │ │ │ -#include │ │ │ │ │ +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 │ │ │ │ │ -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_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/a00272_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: raviartthomas3cube2dlocalbasis.hh Source File │ │ │ │ +dune-localfunctions: raviartthomas0prismlocalbasis.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -70,659 +70,146 @@ │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
raviartthomas3cube2dlocalbasis.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_RAVIARTTHOMAS3_CUBE2D_LOCALBASIS_HH
│ │ │ │ -
6#define DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS3_CUBE2D_LOCALBASIS_HH
│ │ │ │ +
5#ifndef DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS0_PRISM_LOCALBASIS_HH
│ │ │ │ +
6#define DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS0_PRISM_LOCALBASIS_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;
│ │ │ │ -
34
│ │ │ │ -
│ │ │ │ -
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];
│ │ │ │ +
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 out[1] = { -1.0 + in[0], in[1], 0.0};
│ │ │ │
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
│ │ │ │ +
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
│ │ │ │ +
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 }
│ │ │ │ +
│ │ │ │ +
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
│ │ │ │ -
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
│ │ │ │ +
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,671 +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 │ │ │ │ │ * _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_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_RAVIARTTHOMAS3_CUBE2D_LOCALBASIS_HH │ │ │ │ │ -6#define DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS3_CUBE2D_LOCALBASIS_HH │ │ │ │ │ +5#ifndef DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS0_PRISM_LOCALBASIS_HH │ │ │ │ │ +6#define DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS0_PRISM_LOCALBASIS_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_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) │ │ │ │ │ -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]; │ │ │ │ │ +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 out[1] = { -1.0 + in[0], in[1], 0.0}; │ │ │ │ │ 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 │ │ │ │ │ +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 │ │ │ │ │ +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 } │ │ │ │ │ +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_:_:_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 │ │ │ │ │ +_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 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 │ │ │ │ │ +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 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 │ │ │ │ │ +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 raviartthomas3cube2dlocalbasis.hh:401 │ │ │ │ │ +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/a00275.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: raviartthomas3cube2dlocalcoefficients.hh File Reference │ │ │ │ +dune-localfunctions: raviartthomas0prismlocalinterpolation.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -65,34 +65,32 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ Classes | │ │ │ │ Namespaces
│ │ │ │ -
raviartthomas3cube2dlocalcoefficients.hh File Reference
│ │ │ │ +
raviartthomas0prismlocalinterpolation.hh File Reference
│ │ │ │
│ │ │ │
│ │ │ │ -
#include <cstddef>
│ │ │ │ -#include <vector>
│ │ │ │ -#include "../../common/localkey.hh"
│ │ │ │ +
#include <vector>
│ │ │ │
│ │ │ │

Go to the source code of this file.

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

│ │ │ │ Classes

class  Dune::RT3Cube2DLocalCoefficients
 Layout map for Raviart-Thomas-3 elements on quadrilaterals. More...
class  Dune::RT0PrismLocalInterpolation< LB >
 First order Raviart-Thomas shape functions on the reference prism. 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_3_c_u_b_e_2_d │ │ │ │ │ + * _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 │ │ │ │ │ -raviartthomas3cube2dlocalcoefficients.hh File Reference │ │ │ │ │ -#include │ │ │ │ │ +raviartthomas0prismlocalinterpolation.hh File Reference │ │ │ │ │ #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_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_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/a00275_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: raviartthomas3cube2dlocalcoefficients.hh Source File │ │ │ │ +dune-localfunctions: raviartthomas0prismlocalinterpolation.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -70,85 +70,97 @@ │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
raviartthomas3cube2dlocalcoefficients.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_RAVIARTTHOMAS3_CUBE2D_LOCALCOEFFICIENTS_HH
│ │ │ │ -
6#define DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS3_CUBE2D_LOCALCOEFFICIENTS_HH
│ │ │ │ +
5#ifndef DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS0_PRISM_LOCALINTERPOLATION_HH
│ │ │ │ +
6#define DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS0_PRISM_LOCALINTERPOLATION_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
│ │ │ │ +
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;
│ │ │ │ +
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 };
│ │ │ │ +
│ │ │ │ +
86}
│ │ │ │ +
87#endif // DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS0_PRISM_LOCALINTERPOLATION_HH
│ │ │ │
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
│ │ │ │ +
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,83 +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 │ │ │ │ │ -raviartthomas3cube2dlocalcoefficients.hh │ │ │ │ │ + * _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_RAVIARTTHOMAS3_CUBE2D_LOCALCOEFFICIENTS_HH │ │ │ │ │ -6#define DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS3_CUBE2D_LOCALCOEFFICIENTS_HH │ │ │ │ │ +5#ifndef DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS0_PRISM_LOCALINTERPOLATION_HH │ │ │ │ │ +6#define DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS0_PRISM_LOCALINTERPOLATION_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 │ │ │ │ │ +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; │ │ │ │ │ +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 │ │ │ │ │ _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() │ │ │ │ │ -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 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 │ │ │ │ │ +_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/a00278.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: raviartthomas2cube2dlocalbasis.hh File Reference │ │ │ │ +dune-localfunctions: raviartthomas02dlocalinterpolation.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -65,35 +65,34 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ Classes | │ │ │ │ Namespaces
│ │ │ │ -
raviartthomas2cube2dlocalbasis.hh File Reference
│ │ │ │ +
raviartthomas02dlocalinterpolation.hh File Reference
│ │ │ │
│ │ │ │
│ │ │ │ -
#include <numeric>
│ │ │ │ +
#include <cmath>
│ │ │ │ +#include <array>
│ │ │ │ +#include <bitset>
│ │ │ │ #include <vector>
│ │ │ │ -#include <dune/common/fmatrix.hh>
│ │ │ │ -#include "../../common/localbasis.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::RT02DLocalInterpolation< LB >
 
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ 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_2_c_u_b_e_2_d │ │ │ │ │ + * _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 │ │ │ │ │ -raviartthomas2cube2dlocalbasis.hh File Reference │ │ │ │ │ -#include │ │ │ │ │ +raviartthomas02dlocalinterpolation.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_:_:_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_:_:_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/a00278_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: raviartthomas2cube2dlocalbasis.hh Source File │ │ │ │ +dune-localfunctions: raviartthomas02dlocalinterpolation.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -70,300 +70,94 @@ │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
raviartthomas2cube2dlocalbasis.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_RAVIARTTHOMAS2_CUBE2D_LOCALBASIS_HH
│ │ │ │ -
6#define DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS2_CUBE2D_LOCALBASIS_HH
│ │ │ │ +
5#ifndef DUNE_RT02DLOCALINTERPOLATION_HH
│ │ │ │ +
6#define DUNE_RT02DLOCALINTERPOLATION_HH
│ │ │ │
7
│ │ │ │ -
8#include <numeric>
│ │ │ │ -
9#include <vector>
│ │ │ │ -
10
│ │ │ │ -
11#include <dune/common/fmatrix.hh>
│ │ │ │ +
8#include <cmath>
│ │ │ │ +
9#include <array>
│ │ │ │ +
10#include <bitset>
│ │ │ │ +
11#include <vector>
│ │ │ │
12
│ │ │ │ -
13#include "../../common/localbasis.hh"
│ │ │ │ -
14
│ │ │ │ -
15namespace Dune
│ │ │ │ -
16{
│ │ │ │ -
26 template<class D, class R>
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
28 {
│ │ │ │ +
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 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 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
│ │ │ │ +
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
│ │ │ │ -
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
│ │ │ │ +
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,437 +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 │ │ │ │ │ * _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 │ │ │ │ │ + * _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_RAVIARTTHOMAS2_CUBE2D_LOCALBASIS_HH │ │ │ │ │ -6#define DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS2_CUBE2D_LOCALBASIS_HH │ │ │ │ │ +5#ifndef DUNE_RT02DLOCALINTERPOLATION_HH │ │ │ │ │ +6#define DUNE_RT02DLOCALINTERPOLATION_HH │ │ │ │ │ 7 │ │ │ │ │ -8#include │ │ │ │ │ -9#include │ │ │ │ │ -10 │ │ │ │ │ -11#include │ │ │ │ │ +8#include │ │ │ │ │ +9#include │ │ │ │ │ +10#include │ │ │ │ │ +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 { │ │ │ │ │ +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,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) │ │ │ │ │ +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 │ │ │ │ │ +_4_2 void _i_n_t_e_r_p_o_l_a_t_e (const F& f, std::vector& out) const │ │ │ │ │ 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; │ │ │ │ │ +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 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 │ │ │ │ │ +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_:_:_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 │ │ │ │ │ +_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/a00281.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: raviartthomas2cube2dlocalinterpolation.hh File Reference │ │ │ │ +dune-localfunctions: raviartthomas02dlocalcoefficients.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -65,33 +65,34 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ Classes | │ │ │ │ Namespaces
│ │ │ │ -
raviartthomas2cube2dlocalinterpolation.hh File Reference
│ │ │ │ +
raviartthomas02dlocalcoefficients.hh File Reference
│ │ │ │
│ │ │ │
│ │ │ │ -
#include <vector>
│ │ │ │ -#include <dune/geometry/quadraturerules.hh>
│ │ │ │ +
#include <cstddef>
│ │ │ │ +#include <iostream>
│ │ │ │ +#include <vector>
│ │ │ │ +#include <dune/localfunctions/common/localkey.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::RT02DLocalCoefficients
 
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ 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_2_c_u_b_e_2_d │ │ │ │ │ + * _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 │ │ │ │ │ -raviartthomas2cube2dlocalinterpolation.hh File Reference │ │ │ │ │ +raviartthomas02dlocalcoefficients.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 │ │ │ │ │ -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_:_:_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/a00281_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: raviartthomas2cube2dlocalinterpolation.hh Source File │ │ │ │ +dune-localfunctions: raviartthomas02dlocalcoefficients.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -70,136 +70,78 @@ │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
raviartthomas2cube2dlocalinterpolation.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_RAVIARTTHOMAS2_CUBE2D_LOCALINTERPOLATION_HH
│ │ │ │ -
6#define DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS2_CUBE2D_LOCALINTERPOLATION_HH
│ │ │ │ +
5#ifndef DUNE_RT0TRIANGLELOCALCOEFFICIENTS_HH
│ │ │ │ +
6#define DUNE_RT0TRIANGLELOCALCOEFFICIENTS_HH
│ │ │ │
7
│ │ │ │ -
8#include <vector>
│ │ │ │ -
9
│ │ │ │ -
10#include <dune/geometry/quadraturerules.hh>
│ │ │ │ +
8#include <cstddef>
│ │ │ │ +
9#include <iostream>
│ │ │ │ +
10#include <vector>
│ │ │ │
11
│ │ │ │ -
12namespace Dune
│ │ │ │ -
13{
│ │ │ │ -
14
│ │ │ │ -
23 template<class LB>
│ │ │ │ + │ │ │ │ +
13
│ │ │ │ +
14namespace Dune
│ │ │ │ +
15{
│ │ │ │ +
16
│ │ │ │
│ │ │ │ - │ │ │ │ + │ │ │ │
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
│ │ │ │ -
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
│ │ │ │ +
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
│ │ │ │ -
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
│ │ │ │ +
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,137 +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 │ │ │ │ │ * _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 │ │ │ │ │ + * _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_RAVIARTTHOMAS2_CUBE2D_LOCALINTERPOLATION_HH │ │ │ │ │ -6#define DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS2_CUBE2D_LOCALINTERPOLATION_HH │ │ │ │ │ +5#ifndef DUNE_RT0TRIANGLELOCALCOEFFICIENTS_HH │ │ │ │ │ +6#define DUNE_RT0TRIANGLELOCALCOEFFICIENTS_HH │ │ │ │ │ 7 │ │ │ │ │ -8#include │ │ │ │ │ -9 │ │ │ │ │ -10#include │ │ │ │ │ +8#include │ │ │ │ │ +9#include │ │ │ │ │ +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 │ │ │ │ │ +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 │ │ │ │ │ -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 │ │ │ │ │ -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 │ │ │ │ │ +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_:_:_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_:_:_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/a00284.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: raviartthomas2cube2dlocalcoefficients.hh File Reference │ │ │ │ +dune-localfunctions: raviartthomas02dlocalbasis.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -65,34 +65,33 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ Classes | │ │ │ │ Namespaces
│ │ │ │ -
raviartthomas2cube2dlocalcoefficients.hh File Reference
│ │ │ │ +
raviartthomas02dlocalbasis.hh File Reference
│ │ │ │
│ │ │ │
│ │ │ │ -
#include <cstddef>
│ │ │ │ -#include <vector>
│ │ │ │ -#include "../../common/localkey.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::RT2Cube2DLocalCoefficients
 Layout map for Raviart-Thomas-2 elements on quadrilaterals. More...
class  Dune::RT02DLocalBasis< D, R >
 
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ 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 │ │ │ │ │ + * _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 │ │ │ │ │ -raviartthomas2cube2dlocalcoefficients.hh File Reference │ │ │ │ │ -#include │ │ │ │ │ -#include │ │ │ │ │ -#include "_._._/_._._/_c_o_m_m_o_n_/_l_o_c_a_l_k_e_y_._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_:_:_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_:_:_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/a00284_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: raviartthomas2cube2dlocalcoefficients.hh Source File │ │ │ │ +dune-localfunctions: raviartthomas02dlocalbasis.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -70,83 +70,138 @@ │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
raviartthomas2cube2dlocalcoefficients.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_RAVIARTTHOMAS2_CUBE2D_LOCALCOEFFICIENTS_HH
│ │ │ │ -
6#define DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS2_CUBE2D_LOCALCOEFFICIENTS_HH
│ │ │ │ +
5#ifndef DUNE_RT0TRIANGLELOCALBASIS_HH
│ │ │ │ +
6#define DUNE_RT0TRIANGLELOCALBASIS_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 };
│ │ │ │ +
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,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 };
│ │ │ │
│ │ │ │ -
57}
│ │ │ │ -
58#endif // DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS2_CUBE2D_LOCALCOEFFICIENTS_HH
│ │ │ │ +
105}
│ │ │ │ +
106#endif
│ │ │ │
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
│ │ │ │ +
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,81 +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 │ │ │ │ │ * _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 │ │ │ │ │ + * _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_RAVIARTTHOMAS2_CUBE2D_LOCALCOEFFICIENTS_HH │ │ │ │ │ -6#define DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS2_CUBE2D_LOCALCOEFFICIENTS_HH │ │ │ │ │ +5#ifndef DUNE_RT0TRIANGLELOCALBASIS_HH │ │ │ │ │ +6#define DUNE_RT0TRIANGLELOCALBASIS_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 │ │ │ │ │ +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; │ │ │ │ │ +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 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_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_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 │ │ │ │ │ =============================================================================== │ │ │ │ │ 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: raviartthomas1cube2d.hh File Reference │ │ │ │ +dune-localfunctions: raviartthomas03d.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -72,29 +72,29 @@ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ Classes | │ │ │ │ Namespaces
│ │ │ │ -
raviartthomas1cube2d.hh File Reference
│ │ │ │ +
raviartthomas03d.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 <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::RT1Cube2DLocalFiniteElement< D, R >
 First order Raviart-Thomas shape functions on quadrilaterals. More...
class  Dune::RT03DLocalFiniteElement< D, R >
 Zero order Raviart-Thomas shape functions on tetrahedra. More...
 
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ Namespaces

namespace  Dune
 
│ │ │ │ ├── html2text {} │ │ │ │ │ @@ -2,23 +2,23 @@ │ │ │ │ │ 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 │ │ │ │ │ -raviartthomas1cube2d.hh File Reference │ │ │ │ │ +raviartthomas03d.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" │ │ │ │ │ +#include <_d_u_n_e_/_l_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_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_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/a00287_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: raviartthomas1cube2d.hh Source File │ │ │ │ +dune-localfunctions: raviartthomas03d.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -74,120 +74,121 @@ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ -
raviartthomas1cube2d.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_RAVIARTTHOMAS1_CUBE2D_LOCALFINITEELEMENT_HH
│ │ │ │ -
6#define DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS1_CUBE2D_LOCALFINITEELEMENT_HH
│ │ │ │ +
5#ifndef DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS_RAVIARTTHOMAS03D_HH
│ │ │ │ +
6#define DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS_RAVIARTTHOMAS03D_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>
│ │ │ │
│ │ │ │ - │ │ │ │ -
28 {
│ │ │ │ -
29
│ │ │ │ +
27 class
│ │ │ │ + │ │ │ │ +
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 }
│ │ │ │ -
│ │ │ │ -
75
│ │ │ │ -
76 private:
│ │ │ │ - │ │ │ │ -
78 RT1Cube2DLocalCoefficients coefficients;
│ │ │ │ - │ │ │ │ -
80 };
│ │ │ │ -
│ │ │ │ -
81}
│ │ │ │ -
82#endif // DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS1_CUBE2D_LOCALFINITEELEMENT_HH
│ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ + │ │ │ │ + │ │ │ │ +
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}
│ │ │ │ +
80
│ │ │ │ +
81#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 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
│ │ │ │ +
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,137 +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 │ │ │ │ │ -raviartthomas1cube2d.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_RAVIARTTHOMAS1_CUBE2D_LOCALFINITEELEMENT_HH │ │ │ │ │ -6#define DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS1_CUBE2D_LOCALFINITEELEMENT_HH │ │ │ │ │ +5#ifndef DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS_RAVIARTTHOMAS03D_HH │ │ │ │ │ +6#define DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS_RAVIARTTHOMAS03D_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" │ │ │ │ │ +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 _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 │ │ │ │ │ +_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< │ │ │ │ │ -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 } │ │ │ │ │ -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_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 │ │ │ │ │ -_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 │ │ │ │ │ +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} │ │ │ │ │ +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 │ │ │ │ │ _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 │ │ │ │ │ +_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 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 │ │ │ │ │ +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 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 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 │ │ │ │ │ +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 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() │ │ │ │ │ +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 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 │ │ │ │ │ +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/a00290.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: raviartthomas03dlocalcoefficients.hh File Reference │ │ │ │ +dune-localfunctions: raviartthomas0cube3d.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -65,34 +65,34 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ Classes | │ │ │ │ Namespaces
│ │ │ │ -
raviartthomas03dlocalcoefficients.hh File Reference
│ │ │ │ +
raviartthomas0cube3d.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 "raviartthomas0cube3d/raviartthomas0cube3dall.hh"
│ │ │ │
│ │ │ │

Go to the source code of this file.

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

│ │ │ │ Classes

class  Dune::RT03DLocalCoefficients
class  Dune::RT0Cube3DLocalFiniteElement< D, R >
 Zero order Raviart-Thomas shape functions on cubes. 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_0_3_d │ │ │ │ │ _C_l_a_s_s_e_s | _N_a_m_e_s_p_a_c_e_s │ │ │ │ │ -raviartthomas03dlocalcoefficients.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> │ │ │ │ │ +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_. │ │ │ │ │ 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_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/a00290_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: raviartthomas03dlocalcoefficients.hh Source File │ │ │ │ +dune-localfunctions: raviartthomas0cube3d.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -70,78 +70,119 @@ │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
raviartthomas03dlocalcoefficients.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_RAVIARTTHOMAS_RAVIARTTHOMAS03D_RAVIARTTHOMAS03DLOCALCOEFFICIENTS_HH
│ │ │ │ -
6#define DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS_RAVIARTTHOMAS03D_RAVIARTTHOMAS03DLOCALCOEFFICIENTS_HH
│ │ │ │ +
5#ifndef DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS0_CUBE3D_LOCALFINITEELEMENT_HH
│ │ │ │ +
6#define DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS0_CUBE3D_LOCALFINITEELEMENT_HH
│ │ │ │
7
│ │ │ │ -
8#include <cstddef>
│ │ │ │ -
9#include <iostream>
│ │ │ │ -
10#include <vector>
│ │ │ │ -
11
│ │ │ │ - │ │ │ │ -
13
│ │ │ │ -
14namespace Dune
│ │ │ │ -
15{
│ │ │ │ -
16
│ │ │ │ +
8#include <dune/geometry/type.hh>
│ │ │ │ +
9
│ │ │ │ + │ │ │ │ + │ │ │ │ +
12
│ │ │ │ +
13namespace Dune
│ │ │ │ +
14{
│ │ │ │ +
23 template<class D, class R>
│ │ │ │
│ │ │ │ - │ │ │ │ + │ │ │ │
25 {
│ │ │ │
26 public:
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
29 {
│ │ │ │ -
30 for (std::size_t i=0; i<4; i++)
│ │ │ │ -
31 li[i] = LocalKey(i,1,0);
│ │ │ │ -
32 }
│ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ +
31
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
33 {}
│ │ │ │
│ │ │ │ -
33
│ │ │ │ +
34
│ │ │ │
│ │ │ │ -
35 std::size_t size () const
│ │ │ │ -
36 {
│ │ │ │ -
37 return 4;
│ │ │ │ -
38 }
│ │ │ │ + │ │ │ │ +
36 basis(s),
│ │ │ │ +
37 interpolation(s)
│ │ │ │ +
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 };
│ │ │ │ +
│ │ │ │ +
40 const typename Traits::LocalBasisType& localBasis () const
│ │ │ │ +
41 {
│ │ │ │ +
42 return basis;
│ │ │ │ +
43 }
│ │ │ │ +
│ │ │ │ +
44
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
46 {
│ │ │ │ +
47 return coefficients;
│ │ │ │ +
48 }
│ │ │ │
│ │ │ │
49
│ │ │ │ -
50}
│ │ │ │ -
51
│ │ │ │ -
52#endif
│ │ │ │ - │ │ │ │ +
│ │ │ │ + │ │ │ │ +
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
│ │ │ │ -
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
│ │ │ │ +
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,77 +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 │ │ │ │ │ - * _r_a_v_i_a_r_t_t_h_o_m_a_s_0_3_d │ │ │ │ │ -raviartthomas03dlocalcoefficients.hh │ │ │ │ │ +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 │ │ │ │ │ -5#ifndef │ │ │ │ │ -DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS_RAVIARTTHOMAS03D_RAVIARTTHOMAS03DLOCALCOEFFICIENTS_HH │ │ │ │ │ -6#define │ │ │ │ │ -DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS_RAVIARTTHOMAS03D_RAVIARTTHOMAS03DLOCALCOEFFICIENTS_HH │ │ │ │ │ +5#ifndef DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS0_CUBE3D_LOCALFINITEELEMENT_HH │ │ │ │ │ +6#define DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS0_CUBE3D_LOCALFINITEELEMENT_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 │ │ │ │ │ +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: │ │ │ │ │ -_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 } │ │ │ │ │ +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_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 }; │ │ │ │ │ +_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 │ │ │ │ │ -50} │ │ │ │ │ -51 │ │ │ │ │ -52#endif │ │ │ │ │ -_l_o_c_a_l_k_e_y_._h_h │ │ │ │ │ +_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 │ │ │ │ │ _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_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/a00293.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: raviartthomas03dlocalbasis.hh File Reference │ │ │ │ +dune-localfunctions: raviartthomascube.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -65,40 +65,68 @@ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ Classes | │ │ │ │ Namespaces
│ │ │ │ -
raviartthomas03dlocalbasis.hh File Reference
│ │ │ │ +
raviartthomascube.hh File Reference
│ │ │ │
│ │ │ │
│ │ │ │ -
#include <numeric>
│ │ │ │ -#include <dune/common/fmatrix.hh>
│ │ │ │ -#include <dune/localfunctions/common/localbasis.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::RT03DLocalBasis< D, R >
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 {} │ │ │ │ │ @@ -1,22 +1,56 @@ │ │ │ │ │ dune-localfunctions 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 │ │ │ │ │ _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> │ │ │ │ │ +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_3_D_L_o_c_a_l_B_a_s_i_s_<_ _D_,_ _R_ _> │ │ │ │ │ +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/a00293_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: raviartthomas03dlocalbasis.hh Source File │ │ │ │ +dune-localfunctions: raviartthomascube.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -70,143 +70,213 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
raviartthomas03dlocalbasis.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_RAVIARTTHOMAS_RAVIARTTHOMAS03D_RAVIARTTHOMAS03DLOCALBASIS_HH
│ │ │ │ -
6#define DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS_RAVIARTTHOMAS03D_RAVIARTTHOMAS03DLOCALBASIS_HH
│ │ │ │ +
5#ifndef DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS_CUBE_HH
│ │ │ │ +
6#define DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS_CUBE_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 }
│ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ +
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 };
│ │ │ │ +
│ │ │ │ +
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
│ │ │ │ -
105 private:
│ │ │ │ -
106
│ │ │ │ -
107 // Signs of the face normals
│ │ │ │ -
108 std::array<R,4> sign_;
│ │ │ │ -
109 };
│ │ │ │ -
│ │ │ │ -
110}
│ │ │ │ -
111#endif
│ │ │ │ +
│ │ │ │ + │ │ │ │ + │ │ │ │ +
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
│ │ │ │ -
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
│ │ │ │ - │ │ │ │ +
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
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,156 +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 │ │ │ │ │ - * _r_a_v_i_a_r_t_t_h_o_m_a_s_0_3_d │ │ │ │ │ -raviartthomas03dlocalbasis.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_RAVIARTTHOMAS_RAVIARTTHOMAS03D_RAVIARTTHOMAS03DLOCALBASIS_HH │ │ │ │ │ -6#define │ │ │ │ │ -DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS_RAVIARTTHOMAS03D_RAVIARTTHOMAS03DLOCALBASIS_HH │ │ │ │ │ +5#ifndef DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS_CUBE_HH │ │ │ │ │ +6#define DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS_CUBE_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 │ │ │ │ │ +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 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 } │ │ │ │ │ +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 │ │ │ │ │ -105 private: │ │ │ │ │ -106 │ │ │ │ │ -107 // Signs of the face normals │ │ │ │ │ -108 std::array sign_; │ │ │ │ │ -109 }; │ │ │ │ │ -110} │ │ │ │ │ -111#endif │ │ │ │ │ +_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_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_4_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 │ │ │ │ │ +_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_3_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_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_:_:_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 │ │ │ │ │ =============================================================================== │ │ │ │ │ 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: raviartthomas03dlocalinterpolation.hh File Reference │ │ │ │ +dune-localfunctions: raviartthomas2cube2dlocalcoefficients.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -65,34 +65,34 @@ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ Classes | │ │ │ │ Namespaces
│ │ │ │ -
raviartthomas03dlocalinterpolation.hh File Reference
│ │ │ │ +
raviartthomas2cube2dlocalcoefficients.hh File Reference
│ │ │ │
│ │ │ │
│ │ │ │ -
#include <cmath>
│ │ │ │ -#include <array>
│ │ │ │ -#include <bitset>
│ │ │ │ +
#include <cstddef>
│ │ │ │ #include <vector>
│ │ │ │ +#include "../../common/localkey.hh"
│ │ │ │
│ │ │ │

Go to the source code of this file.

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

│ │ │ │ Classes

class  Dune::RT03DLocalInterpolation< LB >
class  Dune::RT2Cube2DLocalCoefficients
 Layout map for Raviart-Thomas-2 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_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 │ │ │ │ │ +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_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_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/a00296_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: raviartthomas03dlocalinterpolation.hh Source File │ │ │ │ +dune-localfunctions: raviartthomas2cube2dlocalcoefficients.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -70,97 +70,83 @@ │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
raviartthomas03dlocalinterpolation.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_RAVIARTTHOMAS03DLOCALINTERPOLATION_HH
│ │ │ │ -
6#define DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS_RAVIARTTHOMAS03D_RAVIARTTHOMAS03DLOCALINTERPOLATION_HH
│ │ │ │ +
5#ifndef DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS2_CUBE2D_LOCALCOEFFICIENTS_HH
│ │ │ │ +
6#define DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS2_CUBE2D_LOCALCOEFFICIENTS_HH
│ │ │ │
7
│ │ │ │ -
8#include <cmath>
│ │ │ │ -
9#include <array>
│ │ │ │ -
10#include <bitset>
│ │ │ │ -
11#include <vector>
│ │ │ │ +
8#include <cstddef>
│ │ │ │ +
9#include <vector>
│ │ │ │ +
10
│ │ │ │ +
11#include "../../common/localkey.hh"
│ │ │ │
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
│ │ │ │ -
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#endif
│ │ │ │ -
RT03DLocalInterpolation(std::bitset< 4 > s=0)
Constructor with given set of face orientations.
Definition raviartthomas03dlocalinterpolation.hh:25
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
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
│ │ │ │
Definition bdfmcube.hh:18
│ │ │ │ -
Definition raviartthomas03dlocalinterpolation.hh:17
│ │ │ │ -
void interpolate(const F &f, std::vector< C > &out) const
Definition raviartthomas03dlocalinterpolation.hh:46
│ │ │ │ +
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,92 +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 │ │ │ │ │ -raviartthomas03dlocalinterpolation.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_RAVIARTTHOMAS03DLOCALINTERPOLATION_HH │ │ │ │ │ -6#define │ │ │ │ │ -DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS_RAVIARTTHOMAS03D_RAVIARTTHOMAS03DLOCALINTERPOLATION_HH │ │ │ │ │ +5#ifndef DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS2_CUBE2D_LOCALCOEFFICIENTS_HH │ │ │ │ │ +6#define DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS2_CUBE2D_LOCALCOEFFICIENTS_HH │ │ │ │ │ 7 │ │ │ │ │ -8#include │ │ │ │ │ -9#include │ │ │ │ │ -10#include │ │ │ │ │ -11#include │ │ │ │ │ +8#include │ │ │ │ │ +9#include │ │ │ │ │ +10 │ │ │ │ │ +11#include "../../common/localkey.hh" │ │ │ │ │ 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 │ │ │ │ │ -_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#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 │ │ │ │ │ +_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_:_:_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 │ │ │ │ │ -DDeeffiinniittiioonn raviartthomas03dlocalinterpolation.hh:46 │ │ │ │ │ +_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/a00299.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: raviartthomas4cube2d.hh File Reference │ │ │ │ +dune-localfunctions: raviartthomas2cube2dlocalbasis.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -65,36 +65,35 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ Classes | │ │ │ │ Namespaces
│ │ │ │ -
raviartthomas4cube2d.hh File Reference
│ │ │ │ +
raviartthomas2cube2dlocalbasis.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 <numeric>
│ │ │ │ +#include <vector>
│ │ │ │ +#include <dune/common/fmatrix.hh>
│ │ │ │ +#include "../../common/localbasis.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::RT2Cube2DLocalBasis< D, R >
 Second order Raviart-Thomas shape functions on the reference quadrilateral. 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_2_c_u_b_e_2_d │ │ │ │ │ _C_l_a_s_s_e_s | _N_a_m_e_s_p_a_c_e_s │ │ │ │ │ -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 "_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" │ │ │ │ │ +raviartthomas2cube2dlocalbasis.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_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_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/a00299_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: raviartthomas4cube2d.hh Source File │ │ │ │ +dune-localfunctions: raviartthomas2cube2dlocalbasis.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -70,123 +70,300 @@ │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
raviartthomas4cube2d.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_RAVIARTTHOMAS4_CUBE2D_LOCALFINITEELEMENT_HH
│ │ │ │ -
6#define DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS4_CUBE2D_LOCALFINITEELEMENT_HH
│ │ │ │ +
5#ifndef DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS2_CUBE2D_LOCALBASIS_HH
│ │ │ │ +
6#define DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS2_CUBE2D_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{
│ │ │ │ -
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 }
│ │ │ │ +
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 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 }
│ │ │ │
│ │ │ │ -
60
│ │ │ │ +
59
│ │ │ │
│ │ │ │ - │ │ │ │ +
61 unsigned int size () const
│ │ │ │
62 {
│ │ │ │ -
63 return interpolation;
│ │ │ │ +
63 return 24;
│ │ │ │
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 }
│ │ │ │ -
│ │ │ │ +
72 inline void evaluateFunction (const typename Traits::DomainType& in,
│ │ │ │ +
73 std::vector<typename Traits::RangeType>& out) const
│ │ │ │ +
74 {
│ │ │ │ +
75 out.resize(24);
│ │ │ │
76
│ │ │ │ -
77 private:
│ │ │ │ - │ │ │ │ -
79 RT4Cube2DLocalCoefficients coefficients;
│ │ │ │ - │ │ │ │ -
81 };
│ │ │ │ -
│ │ │ │ -
82}
│ │ │ │ -
83#endif // DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS4_CUBE2D_LOCALFINITEELEMENT_HH
│ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ +
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
│ │ │ │ -
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
│ │ │ │ +
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,136 +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 │ │ │ │ │ -raviartthomas4cube2d.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_RAVIARTTHOMAS4_CUBE2D_LOCALFINITEELEMENT_HH │ │ │ │ │ -6#define DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS4_CUBE2D_LOCALFINITEELEMENT_HH │ │ │ │ │ +5#ifndef DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS2_CUBE2D_LOCALBASIS_HH │ │ │ │ │ +6#define DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS2_CUBE2D_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_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" │ │ │ │ │ +8#include │ │ │ │ │ +9#include │ │ │ │ │ +10 │ │ │ │ │ +11#include │ │ │ │ │ +12 │ │ │ │ │ +13#include "../../common/localbasis.hh" │ │ │ │ │ 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 │ │ │ │ │ -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 │ │ │ │ │ +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 interpolation; │ │ │ │ │ +63 return 24; │ │ │ │ │ 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 } │ │ │ │ │ +_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 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_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 │ │ │ │ │ -_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 │ │ │ │ │ +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_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, 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 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 │ │ │ │ │ -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 │ │ │ │ │ -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 │ │ │ │ │ +_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 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 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/a00302.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: raviartthomas1cube3d.hh File Reference │ │ │ │ +dune-localfunctions: raviartthomas2cube2dlocalinterpolation.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -65,36 +65,33 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ Classes | │ │ │ │ Namespaces
│ │ │ │ -
raviartthomas1cube3d.hh File Reference
│ │ │ │ +
raviartthomas2cube2dlocalinterpolation.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 <vector>
│ │ │ │ +#include <dune/geometry/quadraturerules.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::RT2Cube2DLocalInterpolation< LB >
 Second order Raviart-Thomas shape functions on the reference triangle. 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_2_c_u_b_e_2_d │ │ │ │ │ _C_l_a_s_s_e_s | _N_a_m_e_s_p_a_c_e_s │ │ │ │ │ -raviartthomas1cube3d.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" │ │ │ │ │ +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_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_:_:_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/a00302_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: raviartthomas1cube3d.hh Source File │ │ │ │ +dune-localfunctions: raviartthomas2cube2dlocalinterpolation.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -70,123 +70,136 @@ │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
raviartthomas1cube3d.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_RAVIARTTHOMAS1_CUBE3D_LOCALFINITEELEMENT_HH
│ │ │ │ -
6#define DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS1_CUBE3D_LOCALFINITEELEMENT_HH
│ │ │ │ +
5#ifndef DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS2_CUBE2D_LOCALINTERPOLATION_HH
│ │ │ │ +
6#define DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS2_CUBE2D_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 {
│ │ │ │ +
23 template<class LB>
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
25 {
│ │ │ │ +
26
│ │ │ │ +
27 public:
│ │ │ │
28
│ │ │ │ -
29 public:
│ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ -
34
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
37 {}
│ │ │ │ -
│ │ │ │ +
│ │ │ │ +
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
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
45 basis(s),
│ │ │ │ -
46 interpolation(s)
│ │ │ │ -
47 {}
│ │ │ │ -
│ │ │ │ -
48
│ │ │ │ -
│ │ │ │ -
49 const typename Traits::LocalBasisType& localBasis () const
│ │ │ │ -
50 {
│ │ │ │ -
51 return basis;
│ │ │ │ -
52 }
│ │ │ │ +
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 }
│ │ │ │
│ │ │ │ -
53
│ │ │ │ +
44
│ │ │ │ +
53 template<typename F, typename C>
│ │ │ │
│ │ │ │ - │ │ │ │ +
54 void interpolate (const F& f, std::vector<C>& out) const
│ │ │ │
55 {
│ │ │ │ -
56 return coefficients;
│ │ │ │ -
57 }
│ │ │ │ +
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 };
│ │ │ │
│ │ │ │ -
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
│ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ +
125}
│ │ │ │ +
126#endif // DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS2_CUBE2D_LOCALINTERPOLATION_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 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
│ │ │ │ +
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,136 +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 │ │ │ │ │ -raviartthomas1cube3d.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_RAVIARTTHOMAS1_CUBE3D_LOCALFINITEELEMENT_HH │ │ │ │ │ -6#define DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS1_CUBE3D_LOCALFINITEELEMENT_HH │ │ │ │ │ +5#ifndef DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS2_CUBE2D_LOCALINTERPOLATION_HH │ │ │ │ │ +6#define DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS2_CUBE2D_LOCALINTERPOLATION_HH │ │ │ │ │ 7 │ │ │ │ │ -8#include │ │ │ │ │ +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 │ │ │ │ │ +11 │ │ │ │ │ +12namespace _D_u_n_e │ │ │ │ │ +13{ │ │ │ │ │ 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 { │ │ │ │ │ +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 │ │ │ │ │ -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 {} │ │ │ │ │ +_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 │ │ │ │ │ -_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 │ │ │ │ │ -_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 │ │ │ │ │ +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 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 │ │ │ │ │ +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 │ │ │ │ │ _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 │ │ │ │ │ -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 │ │ │ │ │ -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 │ │ │ │ │ +_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 │ │ │ │ │ =============================================================================== │ │ │ │ │ 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: raviartthomaslfecache.hh File Reference │ │ │ │ +dune-localfunctions: raviartthomas0cube2d.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -70,39 +70,35 @@ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │
│ │ │ │ -Namespaces | │ │ │ │ -Typedefs
│ │ │ │ -
raviartthomaslfecache.hh File Reference
│ │ │ │ +Classes | │ │ │ │ +Namespaces
│ │ │ │ +
raviartthomas0cube2d.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 <dune/geometry/type.hh>
│ │ │ │ +#include <dune/localfunctions/common/localfiniteelementtraits.hh>
│ │ │ │ +#include "raviartthomas0cube2d/raviartthomas0cube2dall.hh"
│ │ │ │
│ │ │ │

Go to the source code of this file.

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

│ │ │ │ +Classes

class  Dune::RT0Cube2DLocalFiniteElement< D, R >
 Zero order Raviart-Thomas shape functions on rectangles. 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,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 │ │ │ │ │ -_N_a_m_e_s_p_a_c_e_s | _T_y_p_e_d_e_f_s │ │ │ │ │ -raviartthomaslfecache.hh File Reference │ │ │ │ │ -#include │ │ │ │ │ -#include │ │ │ │ │ +_C_l_a_s_s_e_s | _N_a_m_e_s_p_a_c_e_s │ │ │ │ │ +raviartthomas0cube2d.hh File Reference │ │ │ │ │ #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> │ │ │ │ │ +#include <_d_u_n_e_/_l_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_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 │ │ │ │ │   │ │ │ │ │ -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/a00305_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: raviartthomaslfecache.hh Source File │ │ │ │ +dune-localfunctions: raviartthomas0cube2d.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -74,120 +74,115 @@ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ -
raviartthomaslfecache.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_RAVIARTTHOMAS_RAVIARTTHOMASLFECACHE_HH
│ │ │ │ -
6#define DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS_RAVIARTTHOMASLFECACHE_HH
│ │ │ │ +
5#ifndef DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS0_CUBE2D_LOCALFINITEELEMENT_HH
│ │ │ │ +
6#define DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS0_CUBE2D_LOCALFINITEELEMENT_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 };
│ │ │ │ +
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 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
│ │ │ │ - │ │ │ │ - │ │ │ │ +
│ │ │ │ +
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::quadrilateral;
│ │ │ │ +
64 }
│ │ │ │ +
│ │ │ │ +
65
│ │ │ │ +
66 private:
│ │ │ │ + │ │ │ │ +
68 RT0Cube2DLocalCoefficients coefficients;
│ │ │ │ + │ │ │ │ +
70 };
│ │ │ │ +
│ │ │ │ +
71}
│ │ │ │ +
72#endif // DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS0_CUBE2D_LOCALFINITEELEMENT_HH
│ │ │ │ + │ │ │ │ + │ │ │ │
Definition bdfmcube.hh:18
│ │ │ │ -
A cache storing a compile time selection of local finite element implementations.
Definition localfiniteelementvariantcache.hh:68
│ │ │ │ +
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
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,134 +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 │ │ │ │ │ -raviartthomaslfecache.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_RAVIARTTHOMAS_RAVIARTTHOMASLFECACHE_HH │ │ │ │ │ -6#define DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS_RAVIARTTHOMASLFECACHE_HH │ │ │ │ │ +5#ifndef DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS0_CUBE2D_LOCALFINITEELEMENT_HH │ │ │ │ │ +6#define DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS0_CUBE2D_LOCALFINITEELEMENT_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 }; │ │ │ │ │ +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 │ │ │ │ │ -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 │ │ │ │ │ +_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 │ │ │ │ │ _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_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 │ │ │ │ │ =============================================================================== │ │ │ │ │ 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: raviartthomas0cube3d.hh File Reference │ │ │ │ +dune-localfunctions: raviartthomas3cube2d.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -72,27 +72,29 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ Classes | │ │ │ │ Namespaces
│ │ │ │ -
raviartthomas0cube3d.hh File Reference
│ │ │ │ +
raviartthomas3cube2d.hh File Reference
│ │ │ │
│ │ │ │
│ │ │ │
#include <dune/geometry/type.hh>
│ │ │ │ -#include <dune/localfunctions/common/localfiniteelementtraits.hh>
│ │ │ │ -#include "raviartthomas0cube3d/raviartthomas0cube3dall.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::RT0Cube3DLocalFiniteElement< D, R >
 Zero order Raviart-Thomas shape functions on cubes. More...
class  Dune::RT3Cube2DLocalFiniteElement< D, R >
 Second order Raviart-Thomas shape functions on cubes. More...
 
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ Namespaces

namespace  Dune
 
│ │ │ │ ├── html2text {} │ │ │ │ │ @@ -2,21 +2,23 @@ │ │ │ │ │ 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 │ │ │ │ │ +raviartthomas3cube2d.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" │ │ │ │ │ +#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_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_._._. │ │ │ │ │ +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/a00308_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: raviartthomas0cube3d.hh Source File │ │ │ │ +dune-localfunctions: raviartthomas3cube2d.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -74,115 +74,119 @@ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ -
raviartthomas0cube3d.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_RAVIARTTHOMAS0_CUBE3D_LOCALFINITEELEMENT_HH
│ │ │ │ -
6#define DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS0_CUBE3D_LOCALFINITEELEMENT_HH
│ │ │ │ +
5#ifndef DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS3_CUBE2D_LOCALFINITEELEMENT_HH
│ │ │ │ +
6#define DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS3_CUBE2D_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 }
│ │ │ │ +
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 }
│ │ │ │
│ │ │ │ -
54
│ │ │ │ +
55
│ │ │ │
│ │ │ │ -
56 unsigned int size () const
│ │ │ │ + │ │ │ │
57 {
│ │ │ │ -
58 return basis.size();
│ │ │ │ +
58 return coefficients;
│ │ │ │
59 }
│ │ │ │
│ │ │ │
60
│ │ │ │
│ │ │ │ -
61 static constexpr GeometryType type ()
│ │ │ │ -
62 {
│ │ │ │ -
63 return GeometryTypes::hexahedron;
│ │ │ │ + │ │ │ │ +
62 {
│ │ │ │ +
63 return interpolation;
│ │ │ │
64 }
│ │ │ │
│ │ │ │
65
│ │ │ │ -
66 private:
│ │ │ │ - │ │ │ │ -
68 RT0Cube3DLocalCoefficients coefficients;
│ │ │ │ - │ │ │ │ -
70 };
│ │ │ │ -
│ │ │ │ -
71}
│ │ │ │ -
72#endif // DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS0_CUBE3D_LOCALFINITEELEMENT_HH
│ │ │ │ - │ │ │ │ - │ │ │ │ +
│ │ │ │ +
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
│ │ │ │ -
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
│ │ │ │ +
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,127 +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 │ │ │ │ │ -raviartthomas0cube3d.hh │ │ │ │ │ +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_RAVIARTTHOMAS0_CUBE3D_LOCALFINITEELEMENT_HH │ │ │ │ │ -6#define DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS0_CUBE3D_LOCALFINITEELEMENT_HH │ │ │ │ │ +5#ifndef DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS3_CUBE2D_LOCALFINITEELEMENT_HH │ │ │ │ │ +6#define DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS3_CUBE2D_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 │ │ │ │ │ +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 basis.size(); │ │ │ │ │ +58 return coefficients; │ │ │ │ │ 59 } │ │ │ │ │ 60 │ │ │ │ │ -_6_1 static constexpr GeometryType _t_y_p_e () │ │ │ │ │ +_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 GeometryTypes::hexahedron; │ │ │ │ │ +63 return interpolation; │ │ │ │ │ 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 │ │ │ │ │ +_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_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 │ │ │ │ │ _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 │ │ │ │ │ +_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 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 │ │ │ │ │ +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 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 │ │ │ │ │ +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 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 │ │ │ │ │ +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 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 │ │ │ │ │ +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/a00311.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: raviartthomas2cube2d.hh File Reference │ │ │ │ +dune-localfunctions: raviartthomas1cube2dlocalbasis.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -65,36 +65,35 @@ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ Classes | │ │ │ │ Namespaces
│ │ │ │ -
raviartthomas2cube2d.hh File Reference
│ │ │ │ +
raviartthomas1cube2dlocalbasis.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 <numeric>
│ │ │ │ +#include <vector>
│ │ │ │ +#include <dune/common/fmatrix.hh>
│ │ │ │ +#include "../../common/localbasis.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::RT1Cube2DLocalBasis< D, R >
 First order Raviart-Thomas shape functions on the reference quadrilateral. 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_2_d │ │ │ │ │ _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" │ │ │ │ │ +raviartthomas1cube2dlocalbasis.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_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_:_:_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 │ │ │ │ │   │ │ │ │ │ =============================================================================== │ │ │ │ │ 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: raviartthomas2cube2d.hh Source File │ │ │ │ +dune-localfunctions: raviartthomas1cube2dlocalbasis.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -70,123 +70,200 @@ │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
raviartthomas2cube2d.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_RAVIARTTHOMAS2_CUBE2D_LOCALFINITEELEMENT_HH
│ │ │ │ -
6#define DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS2_CUBE2D_LOCALFINITEELEMENT_HH
│ │ │ │ +
5#ifndef DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS1_CUBE2D_LOCALBASIS_HH
│ │ │ │ +
6#define DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS1_CUBE2D_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
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
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
│ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ +
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
│ │ │ │ +
│ │ │ │ +
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
│ │ │ │ +
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 };
│ │ │ │ +
│ │ │ │ +
182}
│ │ │ │ +
183#endif // DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS1_CUBE2D_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
│ │ │ │ -
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
│ │ │ │ +
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 {} │ │ │ │ │ @@ -1,136 +1,219 @@ │ │ │ │ │ dune-localfunctions 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 │ │ │ │ │ + * _r_a_v_i_a_r_t_t_h_o_m_a_s_1_c_u_b_e_2_d │ │ │ │ │ +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_RAVIARTTHOMAS2_CUBE2D_LOCALFINITEELEMENT_HH │ │ │ │ │ -6#define DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS2_CUBE2D_LOCALFINITEELEMENT_HH │ │ │ │ │ +5#ifndef DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS1_CUBE2D_LOCALBASIS_HH │ │ │ │ │ +6#define DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS1_CUBE2D_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_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" │ │ │ │ │ +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_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_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_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_c_o_e_f_f_i_c_i_e_n_t_s_._h_h │ │ │ │ │ +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 │ │ │ │ │ +_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 │ │ │ │ │ +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 │ │ │ │ │ _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 │ │ │ │ │ +_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 │ │ │ │ │ +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 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) │ │ │ │ │ +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 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 │ │ │ │ │ +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/a00314.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: raviartthomas0prismlocalinterpolation.hh File Reference │ │ │ │ +dune-localfunctions: raviartthomas1cube2dlocalinterpolation.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -65,32 +65,33 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ Classes | │ │ │ │ Namespaces
│ │ │ │ -
raviartthomas0prismlocalinterpolation.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::RT0PrismLocalInterpolation< LB >
 First order Raviart-Thomas shape functions on the reference prism. 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_r_i_s_m │ │ │ │ │ + * _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 │ │ │ │ │ -raviartthomas0prismlocalinterpolation.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_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_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/a00314_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: raviartthomas0prismlocalinterpolation.hh Source File │ │ │ │ +dune-localfunctions: raviartthomas1cube2dlocalinterpolation.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -70,97 +70,123 @@ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
raviartthomas0prismlocalinterpolation.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_PRISM_LOCALINTERPOLATION_HH
│ │ │ │ -
6#define DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS0_PRISM_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 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 }
│ │ │ │ -
│ │ │ │ +
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_PRISM_LOCALINTERPOLATION_HH
│ │ │ │ +
112}
│ │ │ │ +
113#endif // DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS1_CUBE2D_LOCALINTERPOLATION_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
│ │ │ │ +
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_r_i_s_m │ │ │ │ │ -raviartthomas0prismlocalinterpolation.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_PRISM_LOCALINTERPOLATION_HH │ │ │ │ │ -6#define DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS0_PRISM_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_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 } │ │ │ │ │ +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_PRISM_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_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 │ │ │ │ │ +_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 raviartthomas0prismlocalinterpolation.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/a00317.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: raviartthomas0prismlocalbasis.hh File Reference │ │ │ │ +dune-localfunctions: raviartthomas1cube2dlocalcoefficients.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -65,35 +65,34 @@ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ Classes | │ │ │ │ Namespaces
│ │ │ │ -
raviartthomas0prismlocalbasis.hh File Reference
│ │ │ │ +
raviartthomas1cube2dlocalcoefficients.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::RT0PrismLocalBasis< D, R >
 First order Raviart-Thomas shape functions on the reference prism. More...
class  Dune::RT1Cube2DLocalCoefficients
 Layout map for Raviart-Thomas-1 elements on quadrilaterals. 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_1_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 │ │ │ │ │ +raviartthomas1cube2dlocalcoefficients.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_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_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/a00317_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: raviartthomas0prismlocalbasis.hh Source File │ │ │ │ +dune-localfunctions: raviartthomas1cube2dlocalcoefficients.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -70,146 +70,83 @@ │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
raviartthomas0prismlocalbasis.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_PRISM_LOCALBASIS_HH
│ │ │ │ -
6#define DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS0_PRISM_LOCALBASIS_HH
│ │ │ │ +
5#ifndef DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS1_CUBE2D_LOCALCOEFFICIENTS_HH
│ │ │ │ +
6#define DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS1_CUBE2D_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;
│ │ │ │ -
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 out[1] = { -1.0 + in[0], in[1], 0.0};
│ │ │ │ -
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};
│ │ │ │ -
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 }
│ │ │ │ -
│ │ │ │ -
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 };
│ │ │ │ +
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 };
│ │ │ │
│ │ │ │ -
128}
│ │ │ │ -
129#endif // DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS0_PRISM_LOCALBASIS_HH
│ │ │ │ +
57}
│ │ │ │ +
58#endif // DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS1_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
│ │ │ │ -
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
│ │ │ │ +
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
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,157 +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_r_i_s_m │ │ │ │ │ -raviartthomas0prismlocalbasis.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_PRISM_LOCALBASIS_HH │ │ │ │ │ -6#define DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS0_PRISM_LOCALBASIS_HH │ │ │ │ │ +5#ifndef DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS1_CUBE2D_LOCALCOEFFICIENTS_HH │ │ │ │ │ +6#define DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS1_CUBE2D_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_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 out[1] = { -1.0 + in[0], in[1], 0.0}; │ │ │ │ │ -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}; │ │ │ │ │ -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 } │ │ │ │ │ -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 │ │ │ │ │ +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 │ │ │ │ │ _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_:_:_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 │ │ │ │ │ +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 │ │ │ │ │ +std::size_t size() const │ │ │ │ │ +number of coefficients │ │ │ │ │ +DDeeffiinniittiioonn raviartthomas1cube2dlocalcoefficients.hh:43 │ │ │ │ │ =============================================================================== │ │ │ │ │ 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: raviartthomas0prismlocalcoefficients.hh File Reference │ │ │ │ +dune-localfunctions: raviartthomas0pyramidlocalbasis.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -65,34 +65,35 @@ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ Classes | │ │ │ │ Namespaces
│ │ │ │ -
raviartthomas0prismlocalcoefficients.hh File Reference
│ │ │ │ +
raviartthomas0pyramidlocalbasis.hh File Reference
│ │ │ │
│ │ │ │
│ │ │ │ -
#include <cstddef>
│ │ │ │ +
#include <numeric>
│ │ │ │ #include <vector>
│ │ │ │ -#include "../../common/localkey.hh"
│ │ │ │ +#include <dune/common/fmatrix.hh>
│ │ │ │ +#include "../../common/localbasis.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::RT0PyramidLocalBasis< D, R >
 First order Raviart-Thomas shape functions on the reference pyramid. 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_p_r_i_s_m │ │ │ │ │ + * _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 │ │ │ │ │ -raviartthomas0prismlocalcoefficients.hh File Reference │ │ │ │ │ -#include │ │ │ │ │ +raviartthomas0pyramidlocalbasis.hh File Reference │ │ │ │ │ +#include │ │ │ │ │ #include │ │ │ │ │ -#include "_._._/_._._/_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_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_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/a00320_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: raviartthomas0prismlocalcoefficients.hh Source File │ │ │ │ +dune-localfunctions: raviartthomas0pyramidlocalbasis.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -70,75 +70,148 @@ │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
raviartthomas0prismlocalcoefficients.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_RAVIARTTHOMAS0_PRISM_LOCALCOEFFICIENTS_HH
│ │ │ │ -
6#define DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS0_PRISM_LOCALCOEFFICIENTS_HH
│ │ │ │ +
5#ifndef DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS0_PYRAMID_LOCALBASIS_HH
│ │ │ │ +
6#define DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS0_PYRAMID_LOCALBASIS_HH
│ │ │ │
7
│ │ │ │ -
8#include <cstddef>
│ │ │ │ +
8#include <numeric>
│ │ │ │
9#include <vector>
│ │ │ │
10
│ │ │ │ -
11#include "../../common/localkey.hh"
│ │ │ │ +
11#include <dune/common/fmatrix.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 }
│ │ │ │ -
│ │ │ │ +
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
│ │ │ │ -
│ │ │ │ -
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 };
│ │ │ │ +
│ │ │ │ +
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 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 };
│ │ │ │
│ │ │ │ -
49}
│ │ │ │ -
50#endif // DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS0_PRISM_LOCALCOEFFICIENTS_HH
│ │ │ │ +
130}
│ │ │ │ +
131#endif // DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS0_PYRAMID_LOCALBASIS_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
│ │ │ │ +
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,73 +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 │ │ │ │ │ - * _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_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_RAVIARTTHOMAS0_PRISM_LOCALCOEFFICIENTS_HH │ │ │ │ │ -6#define DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS0_PRISM_LOCALCOEFFICIENTS_HH │ │ │ │ │ +5#ifndef DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS0_PYRAMID_LOCALBASIS_HH │ │ │ │ │ +6#define DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS0_PYRAMID_LOCALBASIS_HH │ │ │ │ │ 7 │ │ │ │ │ -8#include │ │ │ │ │ +8#include │ │ │ │ │ 9#include │ │ │ │ │ 10 │ │ │ │ │ -11#include "../../common/localkey.hh" │ │ │ │ │ +11#include │ │ │ │ │ 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 } │ │ │ │ │ +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; │ │ │ │ │ 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 │ │ │ │ │ +_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& 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_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 │ │ │ │ │ +_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 │ │ │ │ │ +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/a00323.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: raviartthomas1cube2dlocalinterpolation.hh File Reference │ │ │ │ +dune-localfunctions: raviartthomas0pyramidlocalcoefficients.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -65,33 +65,34 @@ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ Classes | │ │ │ │ Namespaces
│ │ │ │ -
raviartthomas1cube2dlocalinterpolation.hh File Reference
│ │ │ │ +
raviartthomas0pyramidlocalcoefficients.hh File Reference
│ │ │ │
│ │ │ │
│ │ │ │ -
#include <vector>
│ │ │ │ -#include <dune/geometry/quadraturerules.hh>
│ │ │ │ +
#include <cstddef>
│ │ │ │ +#include <vector>
│ │ │ │ +#include "../../common/localkey.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::RT0PyramidLocalCoefficients
 Layout map for Raviart-Thomas-1 elements on pyramids. 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_1_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 │ │ │ │ │ -raviartthomas1cube2dlocalinterpolation.hh File Reference │ │ │ │ │ +raviartthomas0pyramidlocalcoefficients.hh File Reference │ │ │ │ │ +#include │ │ │ │ │ #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_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_._._. │ │ │ │ │ +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/a00323_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: raviartthomas1cube2dlocalinterpolation.hh Source File │ │ │ │ +dune-localfunctions: raviartthomas0pyramidlocalcoefficients.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -70,123 +70,75 @@ │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
raviartthomas1cube2dlocalinterpolation.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_CUBE2D_LOCALINTERPOLATION_HH
│ │ │ │ -
6#define DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS1_CUBE2D_LOCALINTERPOLATION_HH
│ │ │ │ +
5#ifndef DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS0_PYRAMID_LOCALCOEFFICIENTS_HH
│ │ │ │ +
6#define DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS0_PYRAMID_LOCALCOEFFICIENTS_HH
│ │ │ │
7
│ │ │ │ -
8#include <vector>
│ │ │ │ -
9
│ │ │ │ -
10#include <dune/geometry/quadraturerules.hh>
│ │ │ │ -
11
│ │ │ │ +
8#include <cstddef>
│ │ │ │ +
9#include <vector>
│ │ │ │ +
10
│ │ │ │ +
11#include "../../common/localkey.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};
│ │ │ │ -
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 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 };
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
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 };
│ │ │ │
│ │ │ │ -
112}
│ │ │ │ -
113#endif // DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS1_CUBE2D_LOCALINTERPOLATION_HH
│ │ │ │ +
49}
│ │ │ │ +
50#endif // DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS0_PYRAMID_LOCALCOEFFICIENTS_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
│ │ │ │ +
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,120 +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_2_d │ │ │ │ │ -raviartthomas1cube2dlocalinterpolation.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_CUBE2D_LOCALINTERPOLATION_HH │ │ │ │ │ -6#define DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS1_CUBE2D_LOCALINTERPOLATION_HH │ │ │ │ │ +5#ifndef DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS0_PYRAMID_LOCALCOEFFICIENTS_HH │ │ │ │ │ +6#define DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS0_PYRAMID_LOCALCOEFFICIENTS_HH │ │ │ │ │ 7 │ │ │ │ │ -8#include │ │ │ │ │ -9 │ │ │ │ │ -10#include │ │ │ │ │ -11 │ │ │ │ │ +8#include │ │ │ │ │ +9#include │ │ │ │ │ +10 │ │ │ │ │ +11#include "../../common/localkey.hh" │ │ │ │ │ 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 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 │ │ │ │ │ +_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_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_:_:_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 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 │ │ │ │ │ +_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/a00326.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: raviartthomas1cube2dlocalcoefficients.hh File Reference │ │ │ │ +dune-localfunctions: raviartthomas0pyramidlocalinterpolation.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -65,34 +65,32 @@ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ Classes | │ │ │ │ Namespaces
│ │ │ │ -
raviartthomas1cube2dlocalcoefficients.hh File Reference
│ │ │ │ +
raviartthomas0pyramidlocalinterpolation.hh File Reference
│ │ │ │
│ │ │ │
│ │ │ │ -
#include <cstddef>
│ │ │ │ -#include <vector>
│ │ │ │ -#include "../../common/localkey.hh"
│ │ │ │ +
#include <vector>
│ │ │ │
│ │ │ │

Go to the source code of this file.

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

│ │ │ │ Classes

class  Dune::RT1Cube2DLocalCoefficients
 Layout map for Raviart-Thomas-1 elements on quadrilaterals. More...
class  Dune::RT0PyramidLocalInterpolation< LB >
 First order Raviart-Thomas shape functions on the reference hexahedron. 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_1_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 │ │ │ │ │ -raviartthomas1cube2dlocalcoefficients.hh File Reference │ │ │ │ │ -#include │ │ │ │ │ +raviartthomas0pyramidlocalinterpolation.hh File Reference │ │ │ │ │ #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_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/a00326_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: raviartthomas1cube2dlocalcoefficients.hh Source File │ │ │ │ +dune-localfunctions: raviartthomas0pyramidlocalinterpolation.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -70,83 +70,97 @@ │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
raviartthomas1cube2dlocalcoefficients.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_RAVIARTTHOMAS1_CUBE2D_LOCALCOEFFICIENTS_HH
│ │ │ │ -
6#define DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS1_CUBE2D_LOCALCOEFFICIENTS_HH
│ │ │ │ +
5#ifndef DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS0_PYRAMID_LOCALINTERPOLATION_HH
│ │ │ │ +
6#define DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS0_PYRAMID_LOCALINTERPOLATION_HH
│ │ │ │
7
│ │ │ │ -
8#include <cstddef>
│ │ │ │ -
9#include <vector>
│ │ │ │ -
10
│ │ │ │ -
11#include "../../common/localkey.hh"
│ │ │ │ -
12
│ │ │ │ -
13namespace Dune
│ │ │ │ -
14{
│ │ │ │ -
15
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
24 {
│ │ │ │ +
8#include <vector>
│ │ │ │ +
9
│ │ │ │ +
10namespace Dune
│ │ │ │ +
11{
│ │ │ │ +
20 template<class LB>
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
22 {
│ │ │ │ +
23
│ │ │ │ +
24 public:
│ │ │ │
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 };
│ │ │ │ +
│ │ │ │ +
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 }
│ │ │ │ +
│ │ │ │ +
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 };
│ │ │ │
│ │ │ │ -
57}
│ │ │ │ -
58#endif // DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS1_CUBE2D_LOCALCOEFFICIENTS_HH
│ │ │ │ +
86}
│ │ │ │ +
87#endif // DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS0_PYRAMID_LOCALINTERPOLATION_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
│ │ │ │ +
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,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_1_c_u_b_e_2_d │ │ │ │ │ -raviartthomas1cube2dlocalcoefficients.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_RAVIARTTHOMAS1_CUBE2D_LOCALCOEFFICIENTS_HH │ │ │ │ │ -6#define DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS1_CUBE2D_LOCALCOEFFICIENTS_HH │ │ │ │ │ +5#ifndef DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS0_PYRAMID_LOCALINTERPOLATION_HH │ │ │ │ │ +6#define DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS0_PYRAMID_LOCALINTERPOLATION_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 { │ │ │ │ │ +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 │ │ │ │ │ -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 │ │ │ │ │ +_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 } │ │ │ │ │ +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_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 │ │ │ │ │ -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 │ │ │ │ │ -std::size_t size() const │ │ │ │ │ -number of coefficients │ │ │ │ │ -DDeeffiinniittiioonn raviartthomas1cube2dlocalcoefficients.hh:43 │ │ │ │ │ +_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/a00329.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: raviartthomas1cube2dlocalbasis.hh File Reference │ │ │ │ +dune-localfunctions: raviartthomas03dlocalbasis.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -65,35 +65,33 @@ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ Classes | │ │ │ │ Namespaces
│ │ │ │ -
raviartthomas1cube2dlocalbasis.hh File Reference
│ │ │ │ +
raviartthomas03dlocalbasis.hh File Reference
│ │ │ │
│ │ │ │
│ │ │ │
#include <numeric>
│ │ │ │ -#include <vector>
│ │ │ │ #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::RT1Cube2DLocalBasis< D, R >
 First order Raviart-Thomas shape functions on the reference quadrilateral. More...
class  Dune::RT03DLocalBasis< 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 │ │ │ │ │ * _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_0_3_d │ │ │ │ │ _C_l_a_s_s_e_s | _N_a_m_e_s_p_a_c_e_s │ │ │ │ │ -raviartthomas1cube2dlocalbasis.hh File Reference │ │ │ │ │ +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_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_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/a00329_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: raviartthomas1cube2dlocalbasis.hh Source File │ │ │ │ +dune-localfunctions: raviartthomas03dlocalbasis.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -70,200 +70,143 @@ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
raviartthomas1cube2dlocalbasis.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_RAVIARTTHOMAS1_CUBE2D_LOCALBASIS_HH
│ │ │ │ -
6#define DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS1_CUBE2D_LOCALBASIS_HH
│ │ │ │ +
5#ifndef DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS_RAVIARTTHOMAS03D_RAVIARTTHOMAS03DLOCALBASIS_HH
│ │ │ │ +
6#define DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS_RAVIARTTHOMAS03D_RAVIARTTHOMAS03DLOCALBASIS_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 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;
│ │ │ │ +
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 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
│ │ │ │ -
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);
│ │ │ │ +
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
│ │ │ │ -
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 };
│ │ │ │ +
│ │ │ │ +
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 };
│ │ │ │
│ │ │ │ -
182}
│ │ │ │ -
183#endif // DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS1_CUBE2D_LOCALBASIS_HH
│ │ │ │ +
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
│ │ │ │ -
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
│ │ │ │ +
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,219 +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_1_c_u_b_e_2_d │ │ │ │ │ -raviartthomas1cube2dlocalbasis.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_RAVIARTTHOMAS1_CUBE2D_LOCALBASIS_HH │ │ │ │ │ -6#define DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS1_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 │ │ │ │ │ -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 │ │ │ │ │ -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; │ │ │ │ │ +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 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 │ │ │ │ │ -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); │ │ │ │ │ +_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 │ │ │ │ │ -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 │ │ │ │ │ +_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 │ │ │ │ │ _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_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 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 │ │ │ │ │ +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 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 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/a00332.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: raviartthomas03d.hh File Reference │ │ │ │ +dune-localfunctions: raviartthomas03dlocalinterpolation.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -65,36 +65,34 @@ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ Classes | │ │ │ │ Namespaces
│ │ │ │ -
raviartthomas03d.hh File Reference
│ │ │ │ +
raviartthomas03dlocalinterpolation.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 <cmath>
│ │ │ │ +#include <array>
│ │ │ │ +#include <bitset>
│ │ │ │ +#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::RT03DLocalInterpolation< 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 │ │ │ │ │ + * _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 │ │ │ │ │ -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" │ │ │ │ │ +raviartthomas03dlocalinterpolation.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_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_:_:_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/a00332_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: raviartthomas03d.hh Source File │ │ │ │ +dune-localfunctions: raviartthomas03dlocalinterpolation.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -70,125 +70,97 @@ │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
raviartthomas03d.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_RAVIARTTHOMAS_RAVIARTTHOMAS03D_HH
│ │ │ │ -
6#define DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS_RAVIARTTHOMAS03D_HH
│ │ │ │ +
5#ifndef DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS_RAVIARTTHOMAS03D_RAVIARTTHOMAS03DLOCALINTERPOLATION_HH
│ │ │ │ +
6#define DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS_RAVIARTTHOMAS03D_RAVIARTTHOMAS03DLOCALINTERPOLATION_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 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}
│ │ │ │ -
80
│ │ │ │ -
81#endif
│ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ +
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
│ │ │ │ +
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#endif
│ │ │ │ +
RT03DLocalInterpolation(std::bitset< 4 > s=0)
Constructor with given set of face orientations.
Definition raviartthomas03dlocalinterpolation.hh:25
│ │ │ │
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
│ │ │ │ +
void interpolate(const F &f, std::vector< C > &out) const
Definition raviartthomas03dlocalinterpolation.hh:46
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,134 +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 │ │ │ │ │ -raviartthomas03d.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_RAVIARTTHOMAS_RAVIARTTHOMAS03D_HH │ │ │ │ │ -6#define DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS_RAVIARTTHOMAS03D_HH │ │ │ │ │ +5#ifndef │ │ │ │ │ +DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS_RAVIARTTHOMAS03D_RAVIARTTHOMAS03DLOCALINTERPOLATION_HH │ │ │ │ │ +6#define │ │ │ │ │ +DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS_RAVIARTTHOMAS03D_RAVIARTTHOMAS03DLOCALINTERPOLATION_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_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 } │ │ │ │ │ -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; │ │ │ │ │ +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 │ │ │ │ │ +_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 │ │ │ │ │ -_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} │ │ │ │ │ -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 │ │ │ │ │ +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#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_:_:_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_:_:_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 │ │ │ │ │ +DDeeffiinniittiioonn raviartthomas03dlocalinterpolation.hh:46 │ │ │ │ │ =============================================================================== │ │ │ │ │ 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: raviartthomas0pyramidlocalinterpolation.hh File Reference │ │ │ │ +dune-localfunctions: raviartthomas03dlocalcoefficients.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -65,32 +65,34 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ Classes | │ │ │ │ Namespaces
│ │ │ │ -
raviartthomas0pyramidlocalinterpolation.hh File Reference
│ │ │ │ +
raviartthomas03dlocalcoefficients.hh File Reference
│ │ │ │
│ │ │ │
│ │ │ │ -
#include <vector>
│ │ │ │ +
#include <cstddef>
│ │ │ │ +#include <iostream>
│ │ │ │ +#include <vector>
│ │ │ │ +#include <dune/localfunctions/common/localkey.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::RT03DLocalCoefficients
 
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ 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_0_3_d │ │ │ │ │ _C_l_a_s_s_e_s | _N_a_m_e_s_p_a_c_e_s │ │ │ │ │ -raviartthomas0pyramidlocalinterpolation.hh File Reference │ │ │ │ │ +raviartthomas03dlocalcoefficients.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_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_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/a00335_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: raviartthomas0pyramidlocalinterpolation.hh Source File │ │ │ │ +dune-localfunctions: raviartthomas03dlocalcoefficients.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -70,97 +70,78 @@ │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
raviartthomas0pyramidlocalinterpolation.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_RAVIARTTHOMAS0_PYRAMID_LOCALINTERPOLATION_HH
│ │ │ │ -
6#define DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS0_PYRAMID_LOCALINTERPOLATION_HH
│ │ │ │ +
5#ifndef DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS_RAVIARTTHOMAS03D_RAVIARTTHOMAS03DLOCALCOEFFICIENTS_HH
│ │ │ │ +
6#define DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS_RAVIARTTHOMAS03D_RAVIARTTHOMAS03DLOCALCOEFFICIENTS_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);
│ │ │ │ +
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 }
│ │ │ │ +
│ │ │ │ +
33
│ │ │ │ +
│ │ │ │ +
35 std::size_t size () const
│ │ │ │ +
36 {
│ │ │ │ +
37 return 4;
│ │ │ │ +
38 }
│ │ │ │ +
│ │ │ │
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};
│ │ │ │ +
│ │ │ │ +
41 const LocalKey& localKey (std::size_t i) const
│ │ │ │ +
42 {
│ │ │ │ +
43 return li[i];
│ │ │ │ +
44 }
│ │ │ │ +
│ │ │ │
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 };
│ │ │ │ +
46 private:
│ │ │ │ +
47 std::vector<LocalKey> li;
│ │ │ │ +
48 };
│ │ │ │
│ │ │ │ -
86}
│ │ │ │ -
87#endif // DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS0_PYRAMID_LOCALINTERPOLATION_HH
│ │ │ │ +
49
│ │ │ │ +
50}
│ │ │ │ +
51
│ │ │ │ +
52#endif
│ │ │ │ + │ │ │ │
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
│ │ │ │ +
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
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,92 +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_p_y_r_a_m_i_d │ │ │ │ │ -raviartthomas0pyramidlocalinterpolation.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_RAVIARTTHOMAS0_PYRAMID_LOCALINTERPOLATION_HH │ │ │ │ │ -6#define DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS0_PYRAMID_LOCALINTERPOLATION_HH │ │ │ │ │ +5#ifndef │ │ │ │ │ +DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS_RAVIARTTHOMAS03D_RAVIARTTHOMAS03DLOCALCOEFFICIENTS_HH │ │ │ │ │ +6#define │ │ │ │ │ +DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS_RAVIARTTHOMAS03D_RAVIARTTHOMAS03DLOCALCOEFFICIENTS_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); │ │ │ │ │ +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 } │ │ │ │ │ +33 │ │ │ │ │ +_3_5 std::size_t _s_i_z_e () const │ │ │ │ │ +36 { │ │ │ │ │ +37 return 4; │ │ │ │ │ +38 } │ │ │ │ │ 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}; │ │ │ │ │ +_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 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); │ │ │ │ │ +46 private: │ │ │ │ │ +47 std::vector li; │ │ │ │ │ +48 }; │ │ │ │ │ +49 │ │ │ │ │ +50} │ │ │ │ │ 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 │ │ │ │ │ +52#endif │ │ │ │ │ +_l_o_c_a_l_k_e_y_._h_h │ │ │ │ │ _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 │ │ │ │ │ -void interpolate(const F &f, std::vector< C > &out) const │ │ │ │ │ -Interpolate a given function with shape functions. │ │ │ │ │ -DDeeffiinniittiioonn raviartthomas0pyramidlocalinterpolation.hh:68 │ │ │ │ │ +_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 │ │ │ │ │ =============================================================================== │ │ │ │ │ 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: raviartthomas0pyramidlocalcoefficients.hh File Reference │ │ │ │ +dune-localfunctions: raviartthomas02d.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -65,34 +65,36 @@ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ Classes | │ │ │ │ Namespaces
│ │ │ │ -
raviartthomas0pyramidlocalcoefficients.hh File Reference
│ │ │ │ +
raviartthomas02d.hh File Reference
│ │ │ │
│ │ │ │
│ │ │ │ -
#include <cstddef>
│ │ │ │ -#include <vector>
│ │ │ │ -#include "../../common/localkey.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

class  Dune::RT0PyramidLocalCoefficients
 Layout map for Raviart-Thomas-1 elements on pyramids. More...
class  Dune::RT02DLocalFiniteElement< D, R >
 Zero order Raviart-Thomas shape functions on triangles. 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_p_y_r_a_m_i_d │ │ │ │ │ _C_l_a_s_s_e_s | _N_a_m_e_s_p_a_c_e_s │ │ │ │ │ -raviartthomas0pyramidlocalcoefficients.hh File Reference │ │ │ │ │ -#include │ │ │ │ │ -#include │ │ │ │ │ -#include "_._._/_._._/_c_o_m_m_o_n_/_l_o_c_a_l_k_e_y_._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 │ │ │ │ │ -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_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/a00338_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: raviartthomas0pyramidlocalcoefficients.hh Source File │ │ │ │ +dune-localfunctions: raviartthomas02d.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -70,75 +70,125 @@ │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
raviartthomas0pyramidlocalcoefficients.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_LOCALFUNCTIONS_RAVIARTTHOMAS0_PYRAMID_LOCALCOEFFICIENTS_HH
│ │ │ │ -
6#define DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS0_PYRAMID_LOCALCOEFFICIENTS_HH
│ │ │ │ +
5#ifndef DUNE_RAVIARTTHOMAS02DLOCALFINITEELEMENT_HH
│ │ │ │ +
6#define DUNE_RAVIARTTHOMAS02DLOCALFINITEELEMENT_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 }
│ │ │ │ -
│ │ │ │ +
8#include <dune/geometry/type.hh>
│ │ │ │ +
9
│ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ +
14
│ │ │ │ +
15namespace Dune
│ │ │ │ +
16{
│ │ │ │ +
17
│ │ │ │ +
26 template<class D, class R>
│ │ │ │ +
│ │ │ │ +
27 class
│ │ │ │ + │ │ │ │ +
29 {
│ │ │ │ +
30 public:
│ │ │ │ + │ │ │ │ + │ │ │ │
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 };
│ │ │ │ + │ │ │ │ +
36 {}
│ │ │ │
│ │ │ │ -
49}
│ │ │ │ -
50#endif // DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS0_PYRAMID_LOCALCOEFFICIENTS_HH
│ │ │ │ +
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
│ │ │ │ -
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
│ │ │ │ +
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,73 +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_0_p_y_r_a_m_i_d │ │ │ │ │ -raviartthomas0pyramidlocalcoefficients.hh │ │ │ │ │ +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_LOCALFUNCTIONS_RAVIARTTHOMAS0_PYRAMID_LOCALCOEFFICIENTS_HH │ │ │ │ │ -6#define DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS0_PYRAMID_LOCALCOEFFICIENTS_HH │ │ │ │ │ +5#ifndef DUNE_RAVIARTTHOMAS02DLOCALFINITEELEMENT_HH │ │ │ │ │ +6#define DUNE_RAVIARTTHOMAS02DLOCALFINITEELEMENT_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 │ │ │ │ │ -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()) │ │ │ │ │ +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 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 } │ │ │ │ │ +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 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 │ │ │ │ │ +_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 │ │ │ │ │ +_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_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_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 │ │ │ │ │ _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 │ │ │ │ │ -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() │ │ │ │ │ +_D_u_n_e_:_:_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 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 │ │ │ │ │ +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/a00341.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: raviartthomas0pyramidlocalbasis.hh File Reference │ │ │ │ +dune-localfunctions: raviartthomas0cube3dall.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -65,35 +65,40 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ Classes | │ │ │ │ Namespaces
│ │ │ │ -
raviartthomas0pyramidlocalbasis.hh File Reference
│ │ │ │ +
raviartthomas0cube3dall.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::RT0PyramidLocalBasis< D, R >
 First order Raviart-Thomas shape functions on the reference pyramid. More...
class  Dune::RT0Cube3DLocalBasis< D, R >
 
class  Dune::RT0Cube3DLocalInterpolation< LB >
 
class  Dune::RT0Cube3DLocalCoefficients
 
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ 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_0_p_y_r_a_m_i_d │ │ │ │ │ + * _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 │ │ │ │ │ -raviartthomas0pyramidlocalbasis.hh File Reference │ │ │ │ │ +raviartthomas0cube3dall.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_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_:_:_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/a00341_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: raviartthomas0pyramidlocalbasis.hh Source File │ │ │ │ +dune-localfunctions: raviartthomas0cube3dall.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -70,148 +70,278 @@ │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
raviartthomas0pyramidlocalbasis.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_LOCALFUNCTIONS_RAVIARTTHOMAS0_PYRAMID_LOCALBASIS_HH
│ │ │ │ -
6#define DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS0_PYRAMID_LOCALBASIS_HH
│ │ │ │ +
5#ifndef DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS0_CUBE3D_ALL_HH
│ │ │ │ +
6#define DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS0_CUBE3D_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,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];
│ │ │ │ +
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 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);
│ │ │ │ +
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 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
│ │ │ │ +
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
│ │ │ │
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 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,159 +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 │ │ │ │ │ - * _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_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_LOCALFUNCTIONS_RAVIARTTHOMAS0_PYRAMID_LOCALBASIS_HH │ │ │ │ │ -6#define DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS0_PYRAMID_LOCALBASIS_HH │ │ │ │ │ +5#ifndef DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS0_CUBE3D_ALL_HH │ │ │ │ │ +6#define DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS0_CUBE3D_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_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:: │ │ │ │ │ +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_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 > _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 for (std::size_t i=0; i& out) const │ │ │ │ │ -89 { │ │ │ │ │ -90 out.resize(5); │ │ │ │ │ +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 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 │ │ │ │ │ +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_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 │ │ │ │ │ +_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 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 │ │ │ │ │ +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 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 │ │ │ │ │ -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 │ │ │ │ │ +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 raviartthomas0pyramidlocalbasis.hh:109 │ │ │ │ │ +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/a00344.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: raviartthomassimplex.hh File Reference │ │ │ │ +dune-localfunctions: raviartthomassimplexinterpolation.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -65,45 +65,57 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ Classes | │ │ │ │ Namespaces
│ │ │ │ -
raviartthomassimplex.hh File Reference
│ │ │ │ +
raviartthomassimplexinterpolation.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 <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::RaviartThomasSimplexLocalFiniteElement< dimDomain, D, R, SF, CF >
 Raviart-Thomas local finite elements of arbitrary order for simplices of arbitrary dimension. 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
 
│ │ │ │ -

Detailed Description

│ │ │ │ -

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

│ │ │ │ -
│ │ │ │ +
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,27 +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_s_i_m_p_l_e_x │ │ │ │ │ _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" │ │ │ │ │ +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_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_:_:_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 │ │ │ │ │   │ │ │ │ │ -********** 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/a00344_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: raviartthomassimplex.hh Source File │ │ │ │ +dune-localfunctions: raviartthomassimplexinterpolation.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -70,66 +70,547 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
raviartthomassimplex.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_RAVIARTTHOMAS_SIMPLEX_HH
│ │ │ │ -
6#define DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS_SIMPLEX_HH
│ │ │ │ +
5#ifndef DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS_RAVIARTTHOMASSIMPLEX_RAVIARTTHOMASSIMPLEXINTERPOLATION_HH
│ │ │ │ +
6#define DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS_RAVIARTTHOMASSIMPLEX_RAVIARTTHOMASSIMPLEXINTERPOLATION_HH
│ │ │ │
7
│ │ │ │ - │ │ │ │ - │ │ │ │ +
8#include <fstream>
│ │ │ │ +
9#include <utility>
│ │ │ │
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;
│ │ │ │ +
11#include <dune/common/exceptions.hh>
│ │ │ │ +
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 }
│ │ │ │ +
│ │ │ │
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
│ │ │ │ - │ │ │ │ +
│ │ │ │ +
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
│ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │
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
│ │ │ │ +
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
│ │ │ │ -
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
│ │ │ │ - │ │ │ │ +
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,72 +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 │ │ │ │ │ -raviartthomassimplex.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_RAVIARTTHOMAS_SIMPLEX_HH │ │ │ │ │ -6#define DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS_SIMPLEX_HH │ │ │ │ │ +5#ifndef │ │ │ │ │ +DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS_RAVIARTTHOMASSIMPLEX_RAVIARTTHOMASSIMPLEXINTERPOLATION_HH │ │ │ │ │ +6#define │ │ │ │ │ +DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS_RAVIARTTHOMASSIMPLEX_RAVIARTTHOMASSIMPLEXINTERPOLATION_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" │ │ │ │ │ +8#include │ │ │ │ │ +9#include │ │ │ │ │ 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; │ │ │ │ │ +11#include │ │ │ │ │ +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 } │ │ │ │ │ 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 │ │ │ │ │ +_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 │ │ │ │ │ +_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 │ │ │ │ │ _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_:_:_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_:_:_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_:_:_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 │ │ │ │ │ =============================================================================== │ │ │ │ │ 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: edges0.5.hh File Reference │ │ │ │ +dune-localfunctions: raviartthomassimplexbasis.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -65,40 +65,35 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ Classes | │ │ │ │ Namespaces
│ │ │ │ -
edges0.5.hh File Reference
│ │ │ │ +
raviartthomassimplexbasis.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 <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::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...
struct  Dune::RaviartThomasBasisFactory< dim, SF, CF >
 
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ 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 │ │ │ │ │ - * _w_h_i_t_n_e_y │ │ │ │ │ + * _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 │ │ │ │ │ _C_l_a_s_s_e_s | _N_a_m_e_s_p_a_c_e_s │ │ │ │ │ -edges0.5.hh File Reference │ │ │ │ │ -#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> │ │ │ │ │ +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_:_:_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_._._. │ │ │ │ │ +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/a00347_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: edges0.5.hh Source File │ │ │ │ +dune-localfunctions: raviartthomassimplexbasis.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -70,132 +70,72 @@ │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
edges0.5.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
│ │ │ │ -
6#ifndef DUNE_LOCALFUNCTIONS_WHITNEY_EDGES0_5_HH
│ │ │ │ -
7#define DUNE_LOCALFUNCTIONS_WHITNEY_EDGES0_5_HH
│ │ │ │ -
8
│ │ │ │ -
9#include <dune/geometry/type.hh>
│ │ │ │ +
5#ifndef DUNE_RAVIARTTHOMASBASIS_HH
│ │ │ │ +
6#define DUNE_RAVIARTTHOMASBASIS_HH
│ │ │ │ +
7
│ │ │ │ +
8#include <fstream>
│ │ │ │ +
9#include <dune/common/exceptions.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:
│ │ │ │ -
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();
│ │ │ │ -
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
│ │ │ │ +
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
│ │ │ │ -
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
│ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ +
Definition raviartthomassimplexbasis.hh:40
│ │ │ │ +
Definition defaultbasisfactory.hh:38
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,151 +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 │ │ │ │ │ - * _w_h_i_t_n_e_y │ │ │ │ │ -edges0.5.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_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 │ │ │ │ │ -6#ifndef DUNE_LOCALFUNCTIONS_WHITNEY_EDGES0_5_HH │ │ │ │ │ -7#define DUNE_LOCALFUNCTIONS_WHITNEY_EDGES0_5_HH │ │ │ │ │ -8 │ │ │ │ │ -9#include │ │ │ │ │ +5#ifndef DUNE_RAVIARTTHOMASBASIS_HH │ │ │ │ │ +6#define DUNE_RAVIARTTHOMASBASIS_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_/_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> │ │ │ │ │ +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 │ │ │ │ │ -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: │ │ │ │ │ -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(); │ │ │ │ │ -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 │ │ │ │ │ +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_:_:_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 │ │ │ │ │ -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 │ │ │ │ │ +_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/a00350.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: common.hh File Reference │ │ │ │ +dune-localfunctions: raviartthomassimplexprebasis.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -65,35 +65,38 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ Classes | │ │ │ │ Namespaces
│ │ │ │ -
common.hh File Reference
│ │ │ │ +
raviartthomassimplexprebasis.hh File Reference
│ │ │ │
│ │ │ │
│ │ │ │ -
#include <cstddef>
│ │ │ │ -#include <dune/geometry/dimension.hh>
│ │ │ │ -#include <dune/geometry/referenceelements.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

struct  Dune::EdgeS0_5Common< dim, DF >
 Common base class for edge elements. More...
struct  Dune::RTPreBasisFactory< dim, Field >
 
struct  Dune::RTPreBasisFactory< dim, Field >::EvaluationBasisFactory< dd, FF >
 
struct  Dune::RTVecMatrix< geometryId, Field >
 
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ 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 │ │ │ │ │ - * _w_h_i_t_n_e_y │ │ │ │ │ - * _e_d_g_e_s_0_._5 │ │ │ │ │ + * _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 │ │ │ │ │ _C_l_a_s_s_e_s | _N_a_m_e_s_p_a_c_e_s │ │ │ │ │ -common.hh File Reference │ │ │ │ │ -#include │ │ │ │ │ -#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 │ │ │ │ │ -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_._._. │ │ │ │ │ +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/a00350_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: common.hh Source File │ │ │ │ +dune-localfunctions: raviartthomassimplexprebasis.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -70,60 +70,283 @@ │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
common.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
│ │ │ │ -
6#ifndef DUNE_LOCALFUNCTIONS_WHITNEY_EDGES0_5_COMMON_HH
│ │ │ │ -
7#define DUNE_LOCALFUNCTIONS_WHITNEY_EDGES0_5_COMMON_HH
│ │ │ │ -
8
│ │ │ │ -
9#include <cstddef>
│ │ │ │ +
5#ifndef DUNE_RAVIARTTHOMASPREBASIS_HH
│ │ │ │ +
6#define DUNE_RAVIARTTHOMASPREBASIS_HH
│ │ │ │ +
7
│ │ │ │ +
8#include <fstream>
│ │ │ │ +
9#include <utility>
│ │ │ │
10
│ │ │ │ -
11#include <dune/geometry/dimension.hh>
│ │ │ │ -
12#include <dune/geometry/referenceelements.hh>
│ │ │ │ -
13#include <dune/geometry/type.hh>
│ │ │ │ +
11#include <dune/geometry/type.hh>
│ │ │ │ +
12
│ │ │ │ + │ │ │ │
14
│ │ │ │ -
15namespace Dune {
│ │ │ │ -
16
│ │ │ │ -
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
│ │ │ │ +
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();
│ │ │ │ +
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
│ │ │ │ + │ │ │ │
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
│ │ │ │ -
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
│ │ │ │ +
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,63 +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 │ │ │ │ │ - * _w_h_i_t_n_e_y │ │ │ │ │ - * _e_d_g_e_s_0_._5 │ │ │ │ │ -common.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_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 │ │ │ │ │ -6#ifndef DUNE_LOCALFUNCTIONS_WHITNEY_EDGES0_5_COMMON_HH │ │ │ │ │ -7#define DUNE_LOCALFUNCTIONS_WHITNEY_EDGES0_5_COMMON_HH │ │ │ │ │ -8 │ │ │ │ │ -9#include │ │ │ │ │ +5#ifndef DUNE_RAVIARTTHOMASPREBASIS_HH │ │ │ │ │ +6#define DUNE_RAVIARTTHOMASPREBASIS_HH │ │ │ │ │ +7 │ │ │ │ │ +8#include │ │ │ │ │ +9#include │ │ │ │ │ 10 │ │ │ │ │ -11#include │ │ │ │ │ -12#include │ │ │ │ │ -13#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_/_p_o_l_y_n_o_m_i_a_l_b_a_s_i_s_._h_h> │ │ │ │ │ 14 │ │ │ │ │ -15namespace _D_u_n_e { │ │ │ │ │ -16 │ │ │ │ │ -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 │ │ │ │ │ +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(); │ │ │ │ │ +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 // 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{})) │ │ │ │ │ -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 │ │ │ │ │ +_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/a00353.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: brezzidouglasmarini2cube2d.hh File Reference │ │ │ │ +dune-localfunctions: raviartthomas0pyramid.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -65,36 +65,36 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ Classes | │ │ │ │ Namespaces
│ │ │ │ -
brezzidouglasmarini2cube2d.hh File Reference
│ │ │ │ +
raviartthomas0pyramid.hh File Reference
│ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │

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::RT0PyramidLocalFiniteElement< D, R >
 First order Raviart-Thomas shape functions on pyramids. 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 │ │ │ │ │ + * _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 │ │ │ │ │ -brezzidouglasmarini2cube2d.hh File Reference │ │ │ │ │ +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 "_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" │ │ │ │ │ +#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 │ │ │ │ │ -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_:_:_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/a00353_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: brezzidouglasmarini2cube2d.hh Source File │ │ │ │ +dune-localfunctions: raviartthomas0pyramid.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -70,123 +70,123 @@ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
brezzidouglasmarini2cube2d.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_LOCALFUNCTIONS_BREZZIDOUGLASMARINI2_QUBE2D_LOCALFINITEELEMENT_HH
│ │ │ │ -
6#define DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI2_QUBE2D_LOCALFINITEELEMENT_HH
│ │ │ │ +
5#ifndef DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS0_PYRAMID_HH
│ │ │ │ +
6#define DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS0_PYRAMID_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
│ │ │ │ +
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
│ │ │ │ +
65 unsigned int size () const
│ │ │ │
66 {
│ │ │ │
67 return basis.size();
│ │ │ │
68 }
│ │ │ │
│ │ │ │
69
│ │ │ │
│ │ │ │ -
70 static constexpr GeometryType type ()
│ │ │ │ +
70 static constexpr GeometryType type ()
│ │ │ │
71 {
│ │ │ │ -
72 return GeometryTypes::quadrilateral;
│ │ │ │ +
72 return GeometryTypes::pyramid;
│ │ │ │
73 }
│ │ │ │
│ │ │ │
74
│ │ │ │
75 private:
│ │ │ │ - │ │ │ │ -
77 BDM2Cube2DLocalCoefficients coefficients;
│ │ │ │ - │ │ │ │ + │ │ │ │ +
77 RT0PyramidLocalCoefficients coefficients;
│ │ │ │ + │ │ │ │
79 };
│ │ │ │
│ │ │ │
80}
│ │ │ │ -
81#endif // DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI2_QUBE2D_LOCALFINITEELEMENT_HH
│ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ +
81#endif // DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS0_PYRAMID_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 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,49 +1,47 @@ │ │ │ │ │ dune-localfunctions 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 │ │ │ │ │ + * _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_LOCALFUNCTIONS_BREZZIDOUGLASMARINI2_QUBE2D_LOCALFINITEELEMENT_HH │ │ │ │ │ -6#define DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI2_QUBE2D_LOCALFINITEELEMENT_HH │ │ │ │ │ +5#ifndef DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS0_PYRAMID_HH │ │ │ │ │ +6#define DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS0_PYRAMID_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_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" │ │ │ │ │ +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 _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 │ │ │ │ │ +_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 _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; │ │ │ │ │ +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 _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 () │ │ │ │ │ +_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 _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) : │ │ │ │ │ +_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; │ │ │ │ │ @@ -62,78 +60,77 @@ │ │ │ │ │ _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; │ │ │ │ │ +72 return GeometryTypes::pyramid; │ │ │ │ │ 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; │ │ │ │ │ +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_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_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_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 │ │ │ │ │ +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_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_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_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_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_:_:_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/a00356.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: brezzidouglasmarini1cube2d.hh File Reference │ │ │ │ +dune-localfunctions: raviartthomaslfecache.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -65,42 +65,44 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ -Classes | │ │ │ │ -Namespaces
│ │ │ │ -
brezzidouglasmarini1cube2d.hh File Reference
│ │ │ │ +Namespaces | │ │ │ │ +Typedefs
│ │ │ │ +
raviartthomaslfecache.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 <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::BDM1Cube2DLocalFiniteElement< D, R >
 First order Brezzi-Douglas-Marini shape functions on quadrilaterals. 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,27 +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 │ │ │ │ │ - * _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 │ │ │ │ │ -brezzidouglasmarini1cube2d.hh File Reference │ │ │ │ │ + * _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 "_._._/_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" │ │ │ │ │ +#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_:_:_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 │ │ │ │ │   │ │ │ │ │ +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/a00356_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: brezzidouglasmarini1cube2d.hh Source File │ │ │ │ +dune-localfunctions: raviartthomaslfecache.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -70,123 +70,124 @@ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
brezzidouglasmarini1cube2d.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_LOCALFUNCTIONS_BREZZIDOUGLASMARINI1_QUBE2D_LOCALFINITEELEMENT_HH
│ │ │ │ -
6#define DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI1_QUBE2D_LOCALFINITEELEMENT_HH
│ │ │ │ +
5#ifndef DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS_RAVIARTTHOMASLFECACHE_HH
│ │ │ │ +
6#define DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS_RAVIARTTHOMASLFECACHE_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;
│ │ │ │ +
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
│ │ │ │ -
│ │ │ │ -
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
│ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ +
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
│ │ │ │ -
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
│ │ │ │ +
A cache storing a compile time selection of local finite element implementations.
Definition localfiniteelementvariantcache.hh:68
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,141 +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 │ │ │ │ │ -brezzidouglasmarini1cube2d.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_LOCALFUNCTIONS_BREZZIDOUGLASMARINI1_QUBE2D_LOCALFINITEELEMENT_HH │ │ │ │ │ -6#define DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI1_QUBE2D_LOCALFINITEELEMENT_HH │ │ │ │ │ +5#ifndef DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS_RAVIARTTHOMASLFECACHE_HH │ │ │ │ │ +6#define DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS_RAVIARTTHOMASLFECACHE_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; │ │ │ │ │ -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 │ │ │ │ │ +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 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; │ │ │ │ │ +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 │ │ │ │ │ -_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_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 │ │ │ │ │ +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_:_:_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 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 │ │ │ │ │ +_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/a00359.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: brezzidouglasmarini2cube2dlocalcoefficients.hh File Reference │ │ │ │ +dune-localfunctions: raviartthomas0prism.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -65,34 +65,36 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ Classes | │ │ │ │ Namespaces
│ │ │ │ -
brezzidouglasmarini2cube2dlocalcoefficients.hh File Reference
│ │ │ │ +
raviartthomas0prism.hh File Reference
│ │ │ │
│ │ │ │
│ │ │ │ -
#include <cstddef>
│ │ │ │ -#include <vector>
│ │ │ │ -#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::BDM2Cube2DLocalCoefficients
 Layout map for Brezzi-Douglas-Marini-2 elements on quadrilaterals. More...
class  Dune::RT0PrismLocalFiniteElement< D, R >
 First order Raviart-Thomas shape functions on prisms. 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 │ │ │ │ │ - * _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 │ │ │ │ │ + * _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 │ │ │ │ │ -brezzidouglasmarini2cube2dlocalcoefficients.hh File Reference │ │ │ │ │ -#include │ │ │ │ │ -#include │ │ │ │ │ -#include "_._._/_._._/_c_o_m_m_o_n_/_l_o_c_a_l_k_e_y_._h_h" │ │ │ │ │ +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" │ │ │ │ │ _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_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_._._. │ │ │ │ │ +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/a00359_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: brezzidouglasmarini2cube2dlocalcoefficients.hh Source File │ │ │ │ +dune-localfunctions: raviartthomas0prism.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -70,81 +70,124 @@ │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
brezzidouglasmarini2cube2dlocalcoefficients.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_LOCALFUNCTIONS_BREZZIDOUGLASMARINI2_CUBE2D_LOCALCOEFFICIENTS_HH
│ │ │ │ -
6#define DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI2_CUBE2D_LOCALCOEFFICIENTS_HH
│ │ │ │ +
5#ifndef DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS0_PRISM_HH
│ │ │ │ +
6#define DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS0_PRISM_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[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 }
│ │ │ │ +
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
│ │ │ │ +
35
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
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 };
│ │ │ │ -
│ │ │ │ -
55} // end namespace Dune
│ │ │ │ -
56#endif // DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI2_CUBE2D_LOCALCOEFFICIENTS_HH
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
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
│ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │
Definition bdfmcube.hh:18
│ │ │ │ -
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
│ │ │ │ +
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,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 │ │ │ │ │ - * _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 │ │ │ │ │ -brezzidouglasmarini2cube2dlocalcoefficients.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_LOCALFUNCTIONS_BREZZIDOUGLASMARINI2_CUBE2D_LOCALCOEFFICIENTS_HH │ │ │ │ │ -6#define DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI2_CUBE2D_LOCALCOEFFICIENTS_HH │ │ │ │ │ +5#ifndef DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS0_PRISM_HH │ │ │ │ │ +6#define DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS0_PRISM_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_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 } │ │ │ │ │ +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" │ │ │ │ │ +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_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 │ │ │ │ │ +_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_:_:_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() │ │ │ │ │ +_D_u_n_e_:_:_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 │ │ │ │ │ +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 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 │ │ │ │ │ +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/a00362.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: brezzidouglasmarini2cube2dlocalbasis.hh File Reference │ │ │ │ +dune-localfunctions: raviartthomas3cube2dlocalinterpolation.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -65,37 +65,33 @@ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ Classes | │ │ │ │ Namespaces
│ │ │ │ -
brezzidouglasmarini2cube2dlocalbasis.hh File Reference
│ │ │ │ +
raviartthomas3cube2dlocalinterpolation.hh File Reference
│ │ │ │
│ │ │ │
│ │ │ │ -
#include <array>
│ │ │ │ -#include <bitset>
│ │ │ │ -#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::BDM2Cube2DLocalBasis< D, R >
 First order Brezzi-Douglas-Marini shape functions on quadrilaterals. More...
class  Dune::RT3Cube2DLocalInterpolation< LB >
 Second order Raviart-Thomas shape functions on the reference quadrilateral. 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_2_c_u_b_e_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_3_c_u_b_e_2_d │ │ │ │ │ _C_l_a_s_s_e_s | _N_a_m_e_s_p_a_c_e_s │ │ │ │ │ -brezzidouglasmarini2cube2dlocalbasis.hh File Reference │ │ │ │ │ -#include │ │ │ │ │ -#include │ │ │ │ │ -#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_:_:_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_:_:_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/a00362_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: brezzidouglasmarini2cube2dlocalbasis.hh Source File │ │ │ │ +dune-localfunctions: raviartthomas3cube2dlocalinterpolation.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -70,320 +70,163 @@ │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
brezzidouglasmarini2cube2dlocalbasis.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_BREZZIDOUGLASMARINI2_CUBE2D_LOCALBASIS_HH
│ │ │ │ -
6#define DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI2_CUBE2D_LOCALBASIS_HH
│ │ │ │ +
5#ifndef DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS3_CUBE2D_LOCALINTERPOLATION_HH
│ │ │ │ +
6#define DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS3_CUBE2D_LOCALINTERPOLATION_HH
│ │ │ │
7
│ │ │ │ -
8#include <array>
│ │ │ │ -
9#include <bitset>
│ │ │ │ -
10#include <numeric>
│ │ │ │ -
11#include <vector>
│ │ │ │ -
12
│ │ │ │ -
13#include <dune/common/fmatrix.hh>
│ │ │ │ +
8#include <vector>
│ │ │ │ +
9
│ │ │ │ +
10#include <dune/geometry/quadraturerules.hh>
│ │ │ │ +
11
│ │ │ │ +
12namespace Dune
│ │ │ │ +
13{
│ │ │ │
14
│ │ │ │ -
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 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 }
│ │ │ │ -
│ │ │ │ +
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
│ │ │ │ +
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;
│ │ │ │ +
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
│ │ │ │ -
│ │ │ │ -
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]);
│ │ │ │ +
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 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 }
│ │ │ │ +
148 // Edge normals
│ │ │ │ +
149 std::array<typename LB::Traits::DomainType, 4> n_;
│ │ │ │ +
150 };
│ │ │ │
│ │ │ │ -
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
│ │ │ │ +
151}
│ │ │ │ +
152
│ │ │ │ +
153#endif // DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS3_CUBE2D_LOCALINTERPOLATION_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
│ │ │ │ +
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,350 +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 │ │ │ │ │ - * _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 │ │ │ │ │ + * _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 │ │ │ │ │ _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_RAVIARTTHOMAS3_CUBE2D_LOCALINTERPOLATION_HH │ │ │ │ │ +6#define DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS3_CUBE2D_LOCALINTERPOLATION_HH │ │ │ │ │ 7 │ │ │ │ │ -8#include │ │ │ │ │ -9#include │ │ │ │ │ -10#include │ │ │ │ │ -11#include │ │ │ │ │ -12 │ │ │ │ │ -13#include │ │ │ │ │ +8#include │ │ │ │ │ +9 │ │ │ │ │ +10#include │ │ │ │ │ +11 │ │ │ │ │ +12namespace _D_u_n_e │ │ │ │ │ +13{ │ │ │ │ │ 14 │ │ │ │ │ -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_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 } │ │ │ │ │ +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 │ │ │ │ │ +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 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 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 │ │ │ │ │ -_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]); │ │ │ │ │ +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 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]; │ │ │ │ │ +148 // Edge normals │ │ │ │ │ +149 std::array n_; │ │ │ │ │ +150 }; │ │ │ │ │ +151} │ │ │ │ │ 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 │ │ │ │ │ +153#endif // DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS3_CUBE2D_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_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) │ │ │ │ │ +_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 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 │ │ │ │ │ -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 │ │ │ │ │ +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/a00365.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: brezzidouglasmarini2cube2dlocalinterpolation.hh File Reference │ │ │ │ +dune-localfunctions: raviartthomas3cube2dlocalcoefficients.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -65,33 +65,34 @@ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ Classes | │ │ │ │ Namespaces
│ │ │ │ -
brezzidouglasmarini2cube2dlocalinterpolation.hh File Reference
│ │ │ │ +
raviartthomas3cube2dlocalcoefficients.hh File Reference
│ │ │ │
│ │ │ │
│ │ │ │ -
#include <vector>
│ │ │ │ -#include <dune/geometry/quadraturerules.hh>
│ │ │ │ +
#include <cstddef>
│ │ │ │ +#include <vector>
│ │ │ │ +#include "../../common/localkey.hh"
│ │ │ │
│ │ │ │

Go to the source code of this file.

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

│ │ │ │ Classes

class  Dune::BDM2Cube2DLocalInterpolation< LB >
 First order Brezzi-Douglas-Marini shape functions on quadrilaterals. 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 │ │ │ │ │ - * _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 │ │ │ │ │ + * _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 │ │ │ │ │ _C_l_a_s_s_e_s | _N_a_m_e_s_p_a_c_e_s │ │ │ │ │ -brezzidouglasmarini2cube2dlocalinterpolation.hh File Reference │ │ │ │ │ +raviartthomas3cube2dlocalcoefficients.hh File Reference │ │ │ │ │ +#include │ │ │ │ │ #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_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_._._. │ │ │ │ │ +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/a00365_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: brezzidouglasmarini2cube2dlocalinterpolation.hh Source File │ │ │ │ +dune-localfunctions: raviartthomas3cube2dlocalcoefficients.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -70,153 +70,85 @@ │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
brezzidouglasmarini2cube2dlocalinterpolation.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_BREZZIDOUGLASMARINI2_CUBE2D_LOCALINTERPOLATION_HH
│ │ │ │ -
6#define DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI2_CUBE2D_LOCALINTERPOLATION_HH
│ │ │ │ +
5#ifndef DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS3_CUBE2D_LOCALCOEFFICIENTS_HH
│ │ │ │ +
6#define DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS3_CUBE2D_LOCALCOEFFICIENTS_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 = 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(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 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 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 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
│ │ │ │ +
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
│ │ │ │
Definition bdfmcube.hh:18
│ │ │ │ -
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
│ │ │ │ +
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
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,157 +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 │ │ │ │ │ - * _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 │ │ │ │ │ -brezzidouglasmarini2cube2dlocalinterpolation.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_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_BREZZIDOUGLASMARINI2_CUBE2D_LOCALINTERPOLATION_HH │ │ │ │ │ -6#define DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI2_CUBE2D_LOCALINTERPOLATION_HH │ │ │ │ │ +5#ifndef DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS3_CUBE2D_LOCALCOEFFICIENTS_HH │ │ │ │ │ +6#define DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS3_CUBE2D_LOCALCOEFFICIENTS_HH │ │ │ │ │ 7 │ │ │ │ │ -8#include │ │ │ │ │ -9 │ │ │ │ │ -10#include │ │ │ │ │ -11 │ │ │ │ │ -12namespace _D_u_n_e │ │ │ │ │ -13{ │ │ │ │ │ -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() │ │ │ │ │ +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 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) │ │ │ │ │ +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 sign2 = -1.0; │ │ │ │ │ +52 return li[i]; │ │ │ │ │ 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(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 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 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 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 │ │ │ │ │ +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_:_:_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() │ │ │ │ │ +_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() │ │ │ │ │ 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 brezzidouglasmarini2cube2dlocalinterpolation.hh:78 │ │ │ │ │ +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 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/a00368.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: brezzidouglasmarini1cube3d.hh File Reference │ │ │ │ +dune-localfunctions: raviartthomas3cube2dlocalbasis.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -65,36 +65,36 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ Classes | │ │ │ │ Namespaces
│ │ │ │ -
brezzidouglasmarini1cube3d.hh File Reference
│ │ │ │ +
raviartthomas3cube2dlocalbasis.hh File Reference
│ │ │ │
│ │ │ │
│ │ │ │ -
#include <dune/geometry/type.hh>
│ │ │ │ -#include "../common/localfiniteelementtraits.hh"
│ │ │ │ -#include "brezzidouglasmarini1cube3d/brezzidouglasmarini1cube3dlocalbasis.hh"
│ │ │ │ -#include "brezzidouglasmarini1cube3d/brezzidouglasmarini1cube3dlocalcoefficients.hh"
│ │ │ │ -#include "brezzidouglasmarini1cube3d/brezzidouglasmarini1cube3dlocalinterpolation.hh"
│ │ │ │ +
#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::BDM1Cube3DLocalFiniteElement< D, R >
 First order Brezzi-Douglas-Marini shape functions on hexahedron. More...
class  Dune::RT3Cube2DLocalBasis< D, R >
 Second order Raviart-Thomas shape functions on the reference quadrilateral. 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 │ │ │ │ │ + * _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 │ │ │ │ │ _C_l_a_s_s_e_s | _N_a_m_e_s_p_a_c_e_s │ │ │ │ │ -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" │ │ │ │ │ +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_:_:_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_:_:_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/a00368_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: brezzidouglasmarini1cube3d.hh Source File │ │ │ │ +dune-localfunctions: raviartthomas3cube2dlocalbasis.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -70,123 +70,659 @@ │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
brezzidouglasmarini1cube3d.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_BREZZIDOUGLASMARINI1_QUBE3D_LOCALFINITEELEMENT_HH
│ │ │ │ -
6#define DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI1_QUBE3D_LOCALFINITEELEMENT_HH
│ │ │ │ +
5#ifndef DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS3_CUBE2D_LOCALBASIS_HH
│ │ │ │ +
6#define DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS3_CUBE2D_LOCALBASIS_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 <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
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
37 {}
│ │ │ │ -
│ │ │ │ -
38
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
45 : basis(s)
│ │ │ │ -
46 , interpolation(s)
│ │ │ │ -
47 {}
│ │ │ │ +
│ │ │ │ +
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 }
│ │ │ │
│ │ │ │ -
48
│ │ │ │ +
47
│ │ │ │
│ │ │ │ -
49 const typename Traits::LocalBasisType& localBasis() const
│ │ │ │ +
49 unsigned int size () const
│ │ │ │
50 {
│ │ │ │ -
51 return basis;
│ │ │ │ +
51 return 40;
│ │ │ │
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
│ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ +
│ │ │ │ +
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 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
│ │ │ │ +
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,139 +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 │ │ │ │ │ - * _b_r_e_z_z_i_d_o_u_g_l_a_s_m_a_r_i_n_i │ │ │ │ │ -brezzidouglasmarini1cube3d.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_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_BREZZIDOUGLASMARINI1_QUBE3D_LOCALFINITEELEMENT_HH │ │ │ │ │ -6#define DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI1_QUBE3D_LOCALFINITEELEMENT_HH │ │ │ │ │ +5#ifndef DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS3_CUBE2D_LOCALBASIS_HH │ │ │ │ │ +6#define DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS3_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_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 │ │ │ │ │ -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; │ │ │ │ │ +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 │ │ │ │ │ -_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 │ │ │ │ │ +_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 basis; │ │ │ │ │ +51 return 40; │ │ │ │ │ 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_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 │ │ │ │ │ -_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 │ │ │ │ │ +_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_:_:_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 │ │ │ │ │ +_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 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_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 │ │ │ │ │ +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/a00371.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: brezzidouglasmarini1cube3dlocalbasis.hh File Reference │ │ │ │ +dune-localfunctions: monomial.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -65,37 +65,45 @@ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ Classes | │ │ │ │ Namespaces
│ │ │ │ -
brezzidouglasmarini1cube3dlocalbasis.hh File Reference
│ │ │ │ +
monomial.hh File Reference
│ │ │ │
│ │ │ │
│ │ │ │ -
#include <array>
│ │ │ │ -#include <bitset>
│ │ │ │ -#include <numeric>
│ │ │ │ +
#include <cassert>
│ │ │ │ +#include <cstddef>
│ │ │ │ +#include <cstdlib>
│ │ │ │ +#include <memory>
│ │ │ │ #include <vector>
│ │ │ │ -#include <dune/common/fmatrix.hh>
│ │ │ │ -#include "../../common/localbasis.hh"
│ │ │ │ +#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

class  Dune::BDM1Cube3DLocalBasis< D, R >
 First order Brezzi-Douglas-Marini shape functions on the reference hexahedron. More...
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,27 +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 │ │ │ │ │ - * _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 │ │ │ │ │ +monomial.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" │ │ │ │ │ +#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 │ │ │ │ │ -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_:_:_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/a00371_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: brezzidouglasmarini1cube3dlocalbasis.hh Source File │ │ │ │ +dune-localfunctions: monomial.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -70,322 +70,223 @@ │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
brezzidouglasmarini1cube3dlocalbasis.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_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>
│ │ │ │ +
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 "../../common/localbasis.hh"
│ │ │ │ +
15#include <dune/geometry/type.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};
│ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ +
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 }
│ │ │ │ +
│ │ │ │ +
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
│ │ │ │ -
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]};
│ │ │ │ +
153
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
157 static_assert(dim <= 3, "MonomFiniteElementFactory knows the "
│ │ │ │ +
158 "available geometry types only up to dimension 3");
│ │ │ │
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 };
│ │ │ │ +
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 }
│ │ │ │
│ │ │ │ -
303} // end namespace Dune
│ │ │ │ -
304#endif // DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI1_CUBE3D_LOCALBASIS_HH
│ │ │ │ +
201 };
│ │ │ │ +
│ │ │ │ +
202}
│ │ │ │ +
203
│ │ │ │ +
204#endif // DUNE_LOCALFUNCTIONS_MONOMIAL_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
│ │ │ │ +
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,334 +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 │ │ │ │ │ - * _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 │ │ │ │ │ +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_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 │ │ │ │ │ +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 "../../common/localbasis.hh" │ │ │ │ │ +15#include │ │ │ │ │ 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}; │ │ │ │ │ +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 │ │ │ │ │ +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 │ │ │ │ │ -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]}; │ │ │ │ │ +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 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}; │ │ │ │ │ +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 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 │ │ │ │ │ +204#endif // DUNE_LOCALFUNCTIONS_MONOMIAL_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_t_o_g_l_o_b_a_l_a_d_a_p_t_o_r_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 │ │ │ │ │ +_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 │ │ │ │ │ _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 │ │ │ │ │ +_D_u_n_e_:_:_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 │ │ │ │ │ -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 │ │ │ │ │ +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/a00374.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: brezzidouglasmarini1cube3dlocalinterpolation.hh File Reference │ │ │ │ +dune-localfunctions: refined.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -65,40 +65,30 @@ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
│ │ │ │ -Classes | │ │ │ │ -Namespaces
│ │ │ │ -
brezzidouglasmarini1cube3dlocalinterpolation.hh File Reference
│ │ │ │ +
refined.hh File Reference
│ │ │ │
│ │ │ │
│ │ │ │ -
#include <vector>
│ │ │ │ -#include <dune/geometry/quadraturerules.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::BDM1Cube3DLocalInterpolation< LB >
 First order Brezzi-Douglas-Marini shape functions on the reference hexahedron. 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 │ │ │ │ │ - * _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 │ │ │ │ │ +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_:_:_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 │ │ │ │ │ -  │ │ │ │ │ +********** 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/a00374_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: brezzidouglasmarini1cube3dlocalinterpolation.hh Source File │ │ │ │ +dune-localfunctions: refined.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -70,134 +70,29 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
brezzidouglasmarini1cube3dlocalinterpolation.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_LOCALFUNCTIONS_BREZZIDOUGLASMARINI1_CUBE3D_LOCALINTERPOLATION_HH
│ │ │ │ -
6#define DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI1_CUBE3D_LOCALINTERPOLATION_HH
│ │ │ │ -
7
│ │ │ │ -
8#include <vector>
│ │ │ │ -
9
│ │ │ │ -
10#include <dune/geometry/quadraturerules.hh>
│ │ │ │ -
11
│ │ │ │ -
12namespace Dune
│ │ │ │ -
13{
│ │ │ │ -
14
│ │ │ │ -
24 template<class LB>
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
26 {
│ │ │ │ -
27
│ │ │ │ -
28 public:
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
31 {
│ │ │ │ -
32 sign0 = sign1 = sign2 = sign3 = sign4 = sign5 = 1.0;
│ │ │ │ -
33 }
│ │ │ │ -
│ │ │ │ -
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
│ │ │ │ -
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
│ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ +
Piecewise P0 finite element.
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,134 +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 │ │ │ │ │ - * _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 │ │ │ │ │ +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_LOCALFUNCTIONS_BREZZIDOUGLASMARINI1_CUBE3D_LOCALINTERPOLATION_HH │ │ │ │ │ -6#define DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI1_CUBE3D_LOCALINTERPOLATION_HH │ │ │ │ │ -7 │ │ │ │ │ -8#include │ │ │ │ │ -9 │ │ │ │ │ -10#include │ │ │ │ │ -11 │ │ │ │ │ -12namespace _D_u_n_e │ │ │ │ │ -13{ │ │ │ │ │ -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 } │ │ │ │ │ -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) │ │ │ │ │ -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 │ │ │ │ │ -_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_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 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 │ │ │ │ │ +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. │ │ │ │ │ =============================================================================== │ │ │ │ │ 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: brezzidouglasmarini1cube3dlocalcoefficients.hh File Reference │ │ │ │ +dune-localfunctions: dualmortarbasis.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -65,41 +65,25 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
│ │ │ │ -Classes | │ │ │ │ -Namespaces
│ │ │ │ -
brezzidouglasmarini1cube3dlocalcoefficients.hh File Reference
│ │ │ │ +
dualmortarbasis.hh File Reference
│ │ │ │
│ │ │ │
│ │ │ │ -
#include <cstddef>
│ │ │ │ -#include <vector>
│ │ │ │ -#include "../../common/localkey.hh"
│ │ │ │ + │ │ │ │

Go to the source code of this file.

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

│ │ │ │ -Classes

class  Dune::BDM1Cube3DLocalCoefficients
 Layout map for Brezzi-Douglas-Marini-1 elements on hexahedra. More...
 
│ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ -

│ │ │ │ -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 │ │ │ │ │ - * _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 │ │ │ │ │ -brezzidouglasmarini1cube3dlocalcoefficients.hh File Reference │ │ │ │ │ -#include │ │ │ │ │ -#include │ │ │ │ │ -#include "_._._/_._._/_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_:_:_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/a00377_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: brezzidouglasmarini1cube3dlocalcoefficients.hh Source File │ │ │ │ +dune-localfunctions: dualmortarbasis.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -70,79 +70,34 @@ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
brezzidouglasmarini1cube3dlocalcoefficients.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_BREZZIDOUGLASMARINI1_CUBE3D_LOCALCOEFFICIENTS_HH
│ │ │ │ -
6#define DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI1_CUBE3D_LOCALCOEFFICIENTS_HH
│ │ │ │ +
5#ifndef DUNE_LOCALFUNCTIONS_DUALMORTARBASIS_HH
│ │ │ │ +
6#define DUNE_LOCALFUNCTIONS_DUALMORTARBASIS_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 }
│ │ │ │ -
│ │ │ │ -
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
│ │ │ │ -
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
│ │ │ │ +
11#endif // #ifndef DUNE_LOCALFUNCTIONS_DUALMORTARBASIS_HH
│ │ │ │ + │ │ │ │ + │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,78 +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_c_u_b_e_3_d │ │ │ │ │ -brezzidouglasmarini1cube3dlocalcoefficients.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_BREZZIDOUGLASMARINI1_CUBE3D_LOCALCOEFFICIENTS_HH │ │ │ │ │ -6#define DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI1_CUBE3D_LOCALCOEFFICIENTS_HH │ │ │ │ │ +5#ifndef DUNE_LOCALFUNCTIONS_DUALMORTARBASIS_HH │ │ │ │ │ +6#define DUNE_LOCALFUNCTIONS_DUALMORTARBASIS_HH │ │ │ │ │ 7 │ │ │ │ │ -8#include │ │ │ │ │ -9#include │ │ │ │ │ +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#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_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 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 │ │ │ │ │ +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/a00380.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: brezzidouglasmarini1simplex2dlocalbasis.hh File Reference │ │ │ │ +dune-localfunctions: orthonormalcompute.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -65,43 +65,57 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ Classes | │ │ │ │ -Namespaces
│ │ │ │ -
brezzidouglasmarini1simplex2dlocalbasis.hh File Reference
│ │ │ │ +Namespaces | │ │ │ │ +Functions
│ │ │ │ +
orthonormalcompute.hh File Reference
│ │ │ │ │ │ │ │
│ │ │ │ -
#include <array>
│ │ │ │ -#include <bitset>
│ │ │ │ -#include <numeric>
│ │ │ │ -#include <vector>
│ │ │ │ +
#include <cassert>
│ │ │ │ +#include <iostream>
│ │ │ │ +#include <fstream>
│ │ │ │ +#include <iomanip>
│ │ │ │ +#include <utility>
│ │ │ │ +#include <map>
│ │ │ │ +#include <dune/common/dynmatrix.hh>
│ │ │ │ #include <dune/common/fmatrix.hh>
│ │ │ │ -#include "../../common/localbasis.hh"
│ │ │ │ +#include <dune/geometry/type.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

class  Dune::BDM1Simplex2DLocalBasis< D, R >
 First order Brezzi-Douglas-Marini shape functions on the reference triangle. More...
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,27 +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_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 │ │ │ │ │ -brezzidouglasmarini1simplex2dlocalbasis.hh File Reference │ │ │ │ │ -#include │ │ │ │ │ -#include │ │ │ │ │ -#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 "_._._/_._._/_c_o_m_m_o_n_/_l_o_c_a_l_b_a_s_i_s_._h_h" │ │ │ │ │ +#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> │ │ │ │ │ _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_._._. │ │ │ │ │ +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/a00380_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: brezzidouglasmarini1simplex2dlocalbasis.hh Source File │ │ │ │ +dune-localfunctions: orthonormalcompute.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -70,215 +70,264 @@ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
brezzidouglasmarini1simplex2dlocalbasis.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_LOCALFUNCTIONS_BREZZIDOUGLASMARINI1_SIMPLEX2D_LOCALBASIS_HH
│ │ │ │ -
6#define DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI1_SIMPLEX2D_LOCALBASIS_HH
│ │ │ │ +
5#ifndef DUNE_ORTHONORMALCOMPUTE_HH
│ │ │ │ +
6#define DUNE_ORTHONORMALCOMPUTE_HH
│ │ │ │
7
│ │ │ │ -
8#include <array>
│ │ │ │ -
9#include <bitset>
│ │ │ │ -
10#include <numeric>
│ │ │ │ -
11#include <vector>
│ │ │ │ -
12
│ │ │ │ -
13#include <dune/common/fmatrix.hh>
│ │ │ │ +
8#include <cassert>
│ │ │ │ +
9#include <iostream>
│ │ │ │ +
10#include <fstream>
│ │ │ │ +
11#include <iomanip>
│ │ │ │ +
12#include <utility>
│ │ │ │ +
13#include <map>
│ │ │ │
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 }
│ │ │ │ +
15#include <dune/common/dynmatrix.hh>
│ │ │ │ +
16#include <dune/common/fmatrix.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 }
│ │ │ │
│ │ │ │ -
42
│ │ │ │ +
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 BDM1Simplex2DLocalBasis (std::bitset<3> s)
│ │ │ │ -
49 {
│ │ │ │ -
50 for (size_t i=0; i<3; i++)
│ │ │ │ -
51 sign_[i] = s[i] ? -1.0 : 1.0;
│ │ │ │ +
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 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;
│ │ │ │ +
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 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 };
│ │ │ │ -
│ │ │ │ -
195}
│ │ │ │ -
196#endif // DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI1_SIMPLEX2D_LOCALBASIS_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
│ │ │ │ +
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,228 +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 │ │ │ │ │ - * _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 │ │ │ │ │ + * _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_LOCALFUNCTIONS_BREZZIDOUGLASMARINI1_SIMPLEX2D_LOCALBASIS_HH │ │ │ │ │ -6#define DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI1_SIMPLEX2D_LOCALBASIS_HH │ │ │ │ │ +5#ifndef DUNE_ORTHONORMALCOMPUTE_HH │ │ │ │ │ +6#define DUNE_ORTHONORMALCOMPUTE_HH │ │ │ │ │ 7 │ │ │ │ │ -8#include │ │ │ │ │ -9#include │ │ │ │ │ -10#include │ │ │ │ │ -11#include │ │ │ │ │ -12 │ │ │ │ │ -13#include │ │ │ │ │ +8#include │ │ │ │ │ +9#include │ │ │ │ │ +10#include │ │ │ │ │ +11#include │ │ │ │ │ +12#include │ │ │ │ │ +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; │ │ │ │ │ +15#include │ │ │ │ │ +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 │ │ │ │ │ -_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; │ │ │ │ │ +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 │ │ │ │ │ -_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; │ │ │ │ │ +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 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 │ │ │ │ │ +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 return 1; │ │ │ │ │ -190 } │ │ │ │ │ -191 │ │ │ │ │ -192 private: │ │ │ │ │ -193 std::array sign_; │ │ │ │ │ -194 }; │ │ │ │ │ -195} │ │ │ │ │ -196#endif // DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI1_SIMPLEX2D_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_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 │ │ │ │ │ +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 │ │ │ │ │ +_m_o_n_o_m_i_a_l_b_a_s_i_s_._h_h │ │ │ │ │ +_f_i_e_l_d_._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 │ │ │ │ │ -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() │ │ │ │ │ -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 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/a00383.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: brezzidouglasmarini1simplex2dlocalinterpolation.hh File Reference │ │ │ │ +dune-localfunctions: orthonormalbasis.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -65,33 +65,35 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ Classes | │ │ │ │ Namespaces
│ │ │ │ -
brezzidouglasmarini1simplex2dlocalinterpolation.hh File Reference
│ │ │ │ +
orthonormalbasis.hh File Reference
│ │ │ │
│ │ │ │
│ │ │ │ -
#include <vector>
│ │ │ │ -#include <dune/geometry/quadraturerules.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::BDM1Simplex2DLocalInterpolation< LB >
 First order Brezzi-Douglas-Marini shape functions on the reference triangle. More...
struct  Dune::OrthonormalBasisFactory< dim, SF, CF >
 
struct  Dune::OrthonormalBasisFactory< dim, SF, CF >::EvaluationBasisFactory< dd, FF >
 
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ 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 │ │ │ │ │ - * _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 │ │ │ │ │ + * _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 │ │ │ │ │ -brezzidouglasmarini1simplex2dlocalinterpolation.hh File Reference │ │ │ │ │ -#include │ │ │ │ │ -#include │ │ │ │ │ +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_:_:_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_._._. │ │ │ │ │ +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/a00383_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: brezzidouglasmarini1simplex2dlocalinterpolation.hh Source File │ │ │ │ +dune-localfunctions: orthonormalbasis.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -70,130 +70,115 @@ │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
brezzidouglasmarini1simplex2dlocalinterpolation.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_LOCALFUNCTIONS_BREZZIDOUGLASMARINI1_SIMPLEX2D_LOCALINTERPOLATION_HH
│ │ │ │ -
6#define DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI1_SIMPLEX2D_LOCALINTERPOLATION_HH
│ │ │ │ +
5#ifndef DUNE_ORTHONORMALBASIS_HH
│ │ │ │ +
6#define DUNE_ORTHONORMALBASIS_HH
│ │ │ │
7
│ │ │ │ -
8#include <vector>
│ │ │ │ +
8#include <sstream>
│ │ │ │
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;
│ │ │ │ -
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;
│ │ │ │ + │ │ │ │ + │ │ │ │ +
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
│ │ │ │ +
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 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 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
│ │ │ │ +
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
│ │ │ │ -
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
│ │ │ │ +
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,131 +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 │ │ │ │ │ - * _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 │ │ │ │ │ + * _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_LOCALFUNCTIONS_BREZZIDOUGLASMARINI1_SIMPLEX2D_LOCALINTERPOLATION_HH │ │ │ │ │ -6#define │ │ │ │ │ -DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI1_SIMPLEX2D_LOCALINTERPOLATION_HH │ │ │ │ │ +5#ifndef DUNE_ORTHONORMALBASIS_HH │ │ │ │ │ +6#define DUNE_ORTHONORMALBASIS_HH │ │ │ │ │ 7 │ │ │ │ │ -8#include │ │ │ │ │ +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; │ │ │ │ │ -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; │ │ │ │ │ +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 │ │ │ │ │ +_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 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 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 │ │ │ │ │ +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 │ │ │ │ │ _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 │ │ │ │ │ -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 │ │ │ │ │ +_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 │ │ │ │ │ =============================================================================== │ │ │ │ │ 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: brezzidouglasmarini1simplex2d.hh File Reference │ │ │ │ +dune-localfunctions: bdfmcube.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -65,36 +65,36 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ Classes | │ │ │ │ Namespaces
│ │ │ │ -
brezzidouglasmarini1simplex2d.hh File Reference
│ │ │ │ +
bdfmcube.hh File Reference
│ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │

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::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_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 │ │ │ │ │ -brezzidouglasmarini1simplex2d.hh File Reference │ │ │ │ │ +bdfmcube.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" │ │ │ │ │ +#include <_d_u_n_e_/_l_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_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_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/a00389_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: brezzidouglasmarini1simplex2d.hh Source File │ │ │ │ +dune-localfunctions: bdfmcube.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -70,124 +70,95 @@ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
brezzidouglasmarini1simplex2d.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_BREZZIDOUGLASMARINI1_SIMPLEX2D_LOCALFINITEELEMENT_HH
│ │ │ │ -
6#define DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI1_SIMPLEX2D_LOCALFINITEELEMENT_HH
│ │ │ │ +
5#ifndef DUNE_LOCALFUNCTIONS_BREZZIDOUGLASFORTINMARINI_BDFMCUBE_HH
│ │ │ │ +
6#define DUNE_LOCALFUNCTIONS_BREZZIDOUGLASFORTINMARINI_BDFMCUBE_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>
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
28 {
│ │ │ │ -
29
│ │ │ │ -
30 public:
│ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ -
35
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
38 {}
│ │ │ │ -
│ │ │ │ -
39
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
46 basis(s),
│ │ │ │ -
47 interpolation(s)
│ │ │ │ -
48 {}
│ │ │ │ -
│ │ │ │ + │ │ │ │ +
11
│ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ +
15
│ │ │ │ +
16
│ │ │ │ +
│ │ │ │ +
17namespace Dune
│ │ │ │ +
18{
│ │ │ │ +
19
│ │ │ │ +
43 template<class D, class R, unsigned int dim, unsigned int order>
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
45 {
│ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │
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 }
│ │ │ │ +
50 public:
│ │ │ │ + │ │ │ │ +
52
│ │ │ │ + │ │ │ │ +
55
│ │ │ │ +
│ │ │ │ +
61 BDFMCubeLocalFiniteElement (std::bitset<2*dim> s)
│ │ │ │ +
62 : basis( s ), interpolation( s )
│ │ │ │ +
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
│ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ +
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 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
│ │ │ │ +
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
│ │ │ │ -
LB LocalBasisType
Definition localfiniteelementtraits.hh:16
│ │ │ │ -
LC LocalCoefficientsType
Definition localfiniteelementtraits.hh:20
│ │ │ │ -
LI LocalInterpolationType
Definition localfiniteelementtraits.hh:24
│ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,144 +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 │ │ │ │ │ -brezzidouglasmarini1simplex2d.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_BREZZIDOUGLASMARINI1_SIMPLEX2D_LOCALFINITEELEMENT_HH │ │ │ │ │ -6#define │ │ │ │ │ -DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI1_SIMPLEX2D_LOCALFINITEELEMENT_HH │ │ │ │ │ +5#ifndef DUNE_LOCALFUNCTIONS_BREZZIDOUGLASFORTINMARINI_BDFMCUBE_HH │ │ │ │ │ +6#define DUNE_LOCALFUNCTIONS_BREZZIDOUGLASFORTINMARINI_BDFMCUBE_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 │ │ │ │ │ -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 {} │ │ │ │ │ +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 │ │ │ │ │ -_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 } │ │ │ │ │ +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_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_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 │ │ │ │ │ -_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 │ │ │ │ │ +_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_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 │ │ │ │ │ +_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 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 │ │ │ │ │ +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 │ │ │ │ │ -_D_u_n_e_:_:_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 │ │ │ │ │ +_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 │ │ │ │ │ =============================================================================== │ │ │ │ │ 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: brezzidouglasmarinisimplex.hh File Reference │ │ │ │ +dune-localfunctions: common.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -65,36 +65,35 @@ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ Classes | │ │ │ │ Namespaces
│ │ │ │ -
brezzidouglasmarinisimplex.hh File Reference
│ │ │ │ +
common.hh File Reference
│ │ │ │
│ │ │ │
│ │ │ │ -
#include <dune/localfunctions/brezzidouglasmarini/brezzidouglasmarini1simplex2d.hh>
│ │ │ │ -#include <dune/localfunctions/brezzidouglasmarini/brezzidouglasmarini2simplex2d.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::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...
struct  Dune::EdgeS0_5Common< dim, DF >
 Common base class for edge 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 │ │ │ │ │ - * _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 │ │ │ │ │ + * _e_d_g_e_s_0_._5 │ │ │ │ │ _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> │ │ │ │ │ +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_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_._._. │ │ │ │ │ +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/a00392_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: brezzidouglasmarinisimplex.hh Source File │ │ │ │ +dune-localfunctions: common.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -70,88 +70,60 @@ │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
brezzidouglasmarinisimplex.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_BREZZIDOUGLASMARINI_BREZZIDOUGLASMARINISIMPLEX_HH
│ │ │ │ -
6#define DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI_BREZZIDOUGLASMARINISIMPLEX_HH
│ │ │ │ -
7
│ │ │ │ - │ │ │ │ - │ │ │ │ +
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
│ │ │ │ -
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
│ │ │ │ - │ │ │ │ - │ │ │ │ +
11#include <dune/geometry/dimension.hh>
│ │ │ │ +
12#include <dune/geometry/referenceelements.hh>
│ │ │ │ +
13#include <dune/geometry/type.hh>
│ │ │ │ +
14
│ │ │ │ +
15namespace Dune {
│ │ │ │ +
16
│ │ │ │ +
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 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
│ │ │ │ +
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,93 +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 │ │ │ │ │ -brezzidouglasmarinisimplex.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_BREZZIDOUGLASMARINI_BREZZIDOUGLASMARINISIMPLEX_HH │ │ │ │ │ -6#define DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI_BREZZIDOUGLASMARINISIMPLEX_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> │ │ │ │ │ +5 │ │ │ │ │ +6#ifndef DUNE_LOCALFUNCTIONS_WHITNEY_EDGES0_5_COMMON_HH │ │ │ │ │ +7#define DUNE_LOCALFUNCTIONS_WHITNEY_EDGES0_5_COMMON_HH │ │ │ │ │ +8 │ │ │ │ │ +9#include │ │ │ │ │ 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 │ │ │ │ │ +11#include │ │ │ │ │ +12#include │ │ │ │ │ +13#include │ │ │ │ │ +14 │ │ │ │ │ +15namespace _D_u_n_e { │ │ │ │ │ +16 │ │ │ │ │ +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_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_:_:_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/a00395.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: brezzidouglasmarinicube.hh File Reference │ │ │ │ +dune-localfunctions: edges0.5.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -65,40 +65,40 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ Classes | │ │ │ │ Namespaces
│ │ │ │ -
brezzidouglasmarinicube.hh File Reference
│ │ │ │ +
edges0.5.hh File Reference
│ │ │ │
│ │ │ │
│ │ │ │ -
#include <dune/localfunctions/brezzidouglasmarini/brezzidouglasmarini1cube2d.hh>
│ │ │ │ -#include <dune/localfunctions/brezzidouglasmarini/brezzidouglasmarini1cube3d.hh>
│ │ │ │ -#include <dune/localfunctions/brezzidouglasmarini/brezzidouglasmarini2cube2d.hh>
│ │ │ │ +
#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>
│ │ │ │
│ │ │ │

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::EdgeS0_5FiniteElement< Geometry, RF >
 FiniteElement for lowest order edge elements on simplices. More...
 
class  Dune::BrezziDouglasMariniCubeLocalFiniteElement< D, R, 2, 2 >
 Brezzi-Douglas-Marini local finite elements for cubes with dimension 2 and order 2. More...
struct  Dune::EdgeS0_5FiniteElement< Geometry, RF >::Traits
 
class  Dune::BrezziDouglasMariniCubeLocalFiniteElement< D, R, 3, 1 >
 Brezzi-Douglas-Marini local finite elements for cubes with dimension 3 and order 1. More...
struct  Dune::EdgeS0_5FiniteElementFactory< Geometry, RF >
 Factory for EdgeS0_5FiniteElement objects. More...
 
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ Namespaces

namespace  Dune
 
│ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,34 +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 │ │ │ │ │ -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> │ │ │ │ │ +edges0.5.hh File Reference │ │ │ │ │ +#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> │ │ │ │ │ _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_:_:_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_:_:_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_._._. │ │ │ │ │ +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 │ │ │ │ │   │ │ │ │ │ -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_._._. │ │ │ │ │ +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/a00395_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: brezzidouglasmarinicube.hh Source File │ │ │ │ +dune-localfunctions: edges0.5.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -70,112 +70,132 @@ │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
brezzidouglasmarinicube.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_BREZZIDOUGLASMARINI_BREZZIDOUGLASMARINICUBE_HH
│ │ │ │ -
6#define DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI_BREZZIDOUGLASMARINICUBE_HH
│ │ │ │ -
7
│ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ -
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
│ │ │ │ +
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
│ │ │ │ +
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:
│ │ │ │ +
61
│ │ │ │ +
64 template<class VertexOrder>
│ │ │ │
│ │ │ │ - │ │ │ │ - │ │ │ │ -
67 {}
│ │ │ │ -
│ │ │ │ -
68 };
│ │ │ │ +
65 EdgeS0_5FiniteElement(const Geometry& geo,
│ │ │ │ +
66 const VertexOrder& vertexOrder) :
│ │ │ │ +
67 basis_(geo, vertexOrder), interpolation_(geo, vertexOrder)
│ │ │ │ +
68 { }
│ │ │ │
│ │ │ │
69
│ │ │ │ -
73 template<class D, class R>
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
75 : public BDM1Cube3DLocalFiniteElement<D, R>
│ │ │ │ -
76 {
│ │ │ │ -
77 public:
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
80 {}
│ │ │ │ +
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_; }
│ │ │ │
│ │ │ │ -
81
│ │ │ │ -
│ │ │ │ - │ │ │ │ - │ │ │ │ -
89 {}
│ │ │ │ -
│ │ │ │ -
90 };
│ │ │ │ +
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
│ │ │ │ -
92} // namespace Dune
│ │ │ │
93
│ │ │ │ -
94#endif // #ifndef DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI_BREZZIDOUGLASMARINICUBE_HH
│ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ +
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 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
│ │ │ │ +
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,122 +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 │ │ │ │ │ -brezzidouglasmarinicube.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_BREZZIDOUGLASMARINI_BREZZIDOUGLASMARINICUBE_HH │ │ │ │ │ -6#define DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI_BREZZIDOUGLASMARINICUBE_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> │ │ │ │ │ -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 }; │ │ │ │ │ +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 │ │ │ │ │ +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: │ │ │ │ │ +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 │ │ │ │ │ -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 {} │ │ │ │ │ +_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 │ │ │ │ │ -_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 }; │ │ │ │ │ +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 │ │ │ │ │ -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_2_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_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 │ │ │ │ │ +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_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_:_:_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 │ │ │ │ │ +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/a00398.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: brezzidouglasmarini2simplex2d.hh File Reference │ │ │ │ +dune-localfunctions: orthonormal.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -65,36 +65,35 @@ │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ Classes | │ │ │ │ Namespaces
│ │ │ │ -
brezzidouglasmarini2simplex2d.hh File Reference
│ │ │ │ +
orthonormal.hh File Reference
│ │ │ │
│ │ │ │
│ │ │ │ -
#include <dune/geometry/type.hh>
│ │ │ │ -#include "../common/localfiniteelementtraits.hh"
│ │ │ │ -#include "brezzidouglasmarini2simplex2d/brezzidouglasmarini2simplex2dlocalbasis.hh"
│ │ │ │ -#include "brezzidouglasmarini2simplex2d/brezzidouglasmarini2simplex2dlocalcoefficients.hh"
│ │ │ │ -#include "brezzidouglasmarini2simplex2d/brezzidouglasmarini2simplex2dlocalinterpolation.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::OrthonormalLocalFiniteElement< dimDomain, D, R, SF, CF >
 A class providing orthonormal basis functions. More...
 
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ Namespaces

namespace  Dune
 
│ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,28 +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 │ │ │ │ │ _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" │ │ │ │ │ +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_:_:_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_:_:_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/a00398_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: brezzidouglasmarini2simplex2d.hh Source File │ │ │ │ +dune-localfunctions: orthonormal.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -70,123 +70,71 @@ │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
brezzidouglasmarini2simplex2d.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_BREZZIDOUGLASMARINI2_SIMPLEX2D_LOCALFINITEELEMENT_HH
│ │ │ │ -
6#define DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI2_SIMPLEX2D_LOCALFINITEELEMENT_HH
│ │ │ │ +
5#ifndef DUNE_ORTHONORMALFINITEELEMENT_HH
│ │ │ │ +
6#define DUNE_ORTHONORMALFINITEELEMENT_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 }
│ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ +
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
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
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
│ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ +
54#endif
│ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │
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
│ │ │ │ +
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,143 +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 │ │ │ │ │ - * _b_r_e_z_z_i_d_o_u_g_l_a_s_m_a_r_i_n_i │ │ │ │ │ -brezzidouglasmarini2simplex2d.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_BREZZIDOUGLASMARINI2_SIMPLEX2D_LOCALFINITEELEMENT_HH │ │ │ │ │ -6#define │ │ │ │ │ -DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI2_SIMPLEX2D_LOCALFINITEELEMENT_HH │ │ │ │ │ +5#ifndef DUNE_ORTHONORMALFINITEELEMENT_HH │ │ │ │ │ +6#define DUNE_ORTHONORMALFINITEELEMENT_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 } │ │ │ │ │ +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 │ │ │ │ │ +_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 │ │ │ │ │ -_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_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_b_a_s_i_s_._h_h │ │ │ │ │ +54#endif │ │ │ │ │ +_o_r_t_h_o_n_o_r_m_a_l_b_a_s_i_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 │ │ │ │ │ _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() │ │ │ │ │ -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 │ │ │ │ │ +_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/a00401.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: brezzidouglasmarini2simplex2dlocalinterpolation.hh File Reference │ │ │ │ +dune-localfunctions: tensor.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -65,39 +65,132 @@ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ Classes | │ │ │ │ -Namespaces
│ │ │ │ -
brezzidouglasmarini2simplex2dlocalinterpolation.hh File Reference
│ │ │ │ +Namespaces | │ │ │ │ +Enumerations | │ │ │ │ +Functions
│ │ │ │ +
tensor.hh File Reference
│ │ │ │ │ │ │ │
│ │ │ │ -
#include <vector>
│ │ │ │ -#include <dune/geometry/quadraturerules.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::BDM2Simplex2DLocalInterpolation< LB >
 First order Brezzi-Douglas-Marini shape functions on triangles. 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,22 +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_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 │ │ │ │ │ -brezzidouglasmarini2simplex2dlocalinterpolation.hh File Reference │ │ │ │ │ + * _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 │ │ │ │ │ +#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_:_:_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_:_:_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/a00401_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: brezzidouglasmarini2simplex2dlocalinterpolation.hh Source File │ │ │ │ +dune-localfunctions: tensor.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -70,155 +70,1417 @@ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
brezzidouglasmarini2simplex2dlocalinterpolation.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_LOCALFUNCTIONS_BREZZIDOUGLASMARINI2_SIMPLEX2D_LOCALINTERPOLATION_HH
│ │ │ │ -
6#define DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI2_SIMPLEX2D_LOCALINTERPOLATION_HH
│ │ │ │ -
7
│ │ │ │ -
8#include <vector>
│ │ │ │ -
9
│ │ │ │ -
10#include <dune/geometry/quadraturerules.hh>
│ │ │ │ +
5
│ │ │ │ +
6#ifndef DUNE_TENSOR_HH
│ │ │ │ +
7#define DUNE_TENSOR_HH
│ │ │ │ +
8
│ │ │ │ +
9#include <ostream>
│ │ │ │ +
10#include <vector>
│ │ │ │
11
│ │ │ │ -
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];
│ │ │ │ +
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 }
│ │ │ │ +
│ │ │ │ +
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 }
│ │ │ │
│ │ │ │
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);
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
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 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;
│ │ │ │ +
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 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 }
│ │ │ │ +
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
│ │ │ │ -
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 };
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
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 }
│ │ │ │
│ │ │ │ -
142} // end namespace Dune
│ │ │ │ -
143#endif // DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI2_SIMPLEX2D_LOCALINTERPOLATION_HH
│ │ │ │ +
948}
│ │ │ │ +
949#endif // DUNE_TENSOR_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
│ │ │ │ +
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,163 +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 │ │ │ │ │ - * _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 │ │ │ │ │ + * _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_LOCALFUNCTIONS_BREZZIDOUGLASMARINI2_SIMPLEX2D_LOCALINTERPOLATION_HH │ │ │ │ │ -6#define │ │ │ │ │ -DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI2_SIMPLEX2D_LOCALINTERPOLATION_HH │ │ │ │ │ -7 │ │ │ │ │ -8#include │ │ │ │ │ -9 │ │ │ │ │ -10#include │ │ │ │ │ +5 │ │ │ │ │ +6#ifndef DUNE_TENSOR_HH │ │ │ │ │ +7#define DUNE_TENSOR_HH │ │ │ │ │ +8 │ │ │ │ │ +9#include │ │ │ │ │ +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 } │ │ │ │ │ -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) │ │ │ │ │ +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 } │ │ │ │ │ +49 │ │ │ │ │ +_5_0 _T_h_i_s &_o_p_e_r_a_t_o_r_=_ ( const _B_l_o_c_k &b ) │ │ │ │ │ 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]; │ │ │ │ │ +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 │ │ │ │ │ -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); │ │ │ │ │ +_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 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; │ │ │ │ │ +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 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) │ │ │ │ │ +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 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 } │ │ │ │ │ +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 │ │ │ │ │ -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 │ │ │ │ │ +_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 &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 │ │ │ │ │ +_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 │ │ │ │ │ =============================================================================== │ │ │ │ │ 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: brezzidouglasmarini2simplex2dlocalcoefficients.hh File Reference │ │ │ │ +dune-localfunctions: coeffmatrix.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -65,34 +65,40 @@ │ │ │ │
│ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ Classes | │ │ │ │ Namespaces
│ │ │ │ -
brezzidouglasmarini2simplex2dlocalcoefficients.hh File Reference
│ │ │ │ +
coeffmatrix.hh File Reference
│ │ │ │
│ │ │ │
│ │ │ │ -
#include <cstddef>
│ │ │ │ +
#include <cassert>
│ │ │ │ +#include <iostream>
│ │ │ │ #include <vector>
│ │ │ │ -#include "../../common/localkey.hh"
│ │ │ │ +#include <dune/common/fvector.hh>
│ │ │ │ +#include <dune/localfunctions/utility/field.hh>
│ │ │ │ +#include <dune/localfunctions/utility/tensor.hh>
│ │ │ │
│ │ │ │

Go to the source code of this file.

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

│ │ │ │ Classes

class  Dune::BDM2Simplex2DLocalCoefficients
 Layout map for Brezzi-Douglas-Marini-2 elements on triangles. More...
struct  Dune::Mult< Field, Field2 >
 
struct  Dune::Mult< Field, FieldVector< Field2, dimRange > >
 
class  Dune::SparseCoeffMatrix< F, bSize >
 
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ 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 │ │ │ │ │ - * _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 │ │ │ │ │ + * _u_t_i_l_i_t_y │ │ │ │ │ _C_l_a_s_s_e_s | _N_a_m_e_s_p_a_c_e_s │ │ │ │ │ -brezzidouglasmarini2simplex2dlocalcoefficients.hh File Reference │ │ │ │ │ -#include │ │ │ │ │ +coeffmatrix.hh File Reference │ │ │ │ │ +#include │ │ │ │ │ +#include │ │ │ │ │ #include │ │ │ │ │ -#include "_._._/_._._/_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_/_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_:_:_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_._._. │ │ │ │ │ +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/a00404_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: brezzidouglasmarini2simplex2dlocalcoefficients.hh Source File │ │ │ │ +dune-localfunctions: coeffmatrix.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -70,84 +70,338 @@ │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
brezzidouglasmarini2simplex2dlocalcoefficients.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_BREZZIDOUGLASMARINI2_SIMPLEX2D_LOCALCOEFFICIENTS_HH
│ │ │ │ -
6#define DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI2_SIMPLEX2D_LOCALCOEFFICIENTS_HH
│ │ │ │ -
7
│ │ │ │ -
8#include <cstddef>
│ │ │ │ +
5#ifndef DUNE_COEFFMATRIX_HH
│ │ │ │ +
6#define DUNE_COEFFMATRIX_HH
│ │ │ │ +
7#include <cassert>
│ │ │ │ +
8#include <iostream>
│ │ │ │
9#include <vector>
│ │ │ │ -
10
│ │ │ │ -
11#include "../../common/localkey.hh"
│ │ │ │ -
12
│ │ │ │ -
13namespace Dune
│ │ │ │ -
14{
│ │ │ │ -
15
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
24 {
│ │ │ │ -
25
│ │ │ │ -
26 public:
│ │ │ │ +
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;
│ │ │ │
│ │ │ │ - │ │ │ │ -
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
│ │ │ │ +
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 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
│ │ │ │ + │ │ │ │ + │ │ │ │
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
│ │ │ │ +
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,85 +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 │ │ │ │ │ - * _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 │ │ │ │ │ + * _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_BREZZIDOUGLASMARINI2_SIMPLEX2D_LOCALCOEFFICIENTS_HH │ │ │ │ │ -6#define │ │ │ │ │ -DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI2_SIMPLEX2D_LOCALCOEFFICIENTS_HH │ │ │ │ │ -7 │ │ │ │ │ -8#include │ │ │ │ │ +5#ifndef DUNE_COEFFMATRIX_HH │ │ │ │ │ +6#define DUNE_COEFFMATRIX_HH │ │ │ │ │ +7#include │ │ │ │ │ +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 │ │ │ │ │ +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 _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 │ │ │ │ │ +_t_e_n_s_o_r_._h_h │ │ │ │ │ +_f_i_e_l_d_._h_h │ │ │ │ │ _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_:_:_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/a00407.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: brezzidouglasmarini2simplex2dlocalbasis.hh File Reference │ │ │ │ +dune-localfunctions: monomialbasis.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -65,37 +65,60 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ Classes | │ │ │ │ Namespaces
│ │ │ │ -
brezzidouglasmarini2simplex2dlocalbasis.hh File Reference
│ │ │ │ +
monomialbasis.hh File Reference
│ │ │ │
│ │ │ │
│ │ │ │ -
#include <array>
│ │ │ │ -#include <bitset>
│ │ │ │ -#include <numeric>
│ │ │ │ -#include <vector>
│ │ │ │ +
#include <vector>
│ │ │ │ +#include <dune/common/fvector.hh>
│ │ │ │ #include <dune/common/fmatrix.hh>
│ │ │ │ -#include "../../common/localbasis.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::BDM2Simplex2DLocalBasis< D, R >
 First order Brezzi-Douglas-Marini shape functions on quadrilaterals. 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,27 +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 │ │ │ │ │ - * _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 │ │ │ │ │ + * _u_t_i_l_i_t_y │ │ │ │ │ _C_l_a_s_s_e_s | _N_a_m_e_s_p_a_c_e_s │ │ │ │ │ -brezzidouglasmarini2simplex2dlocalbasis.hh File Reference │ │ │ │ │ -#include │ │ │ │ │ -#include │ │ │ │ │ -#include │ │ │ │ │ +monomialbasis.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 │ │ │ │ │ +#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_:_:_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_._._. │ │ │ │ │ + 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/a00407_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: brezzidouglasmarini2simplex2dlocalbasis.hh Source File │ │ │ │ +dune-localfunctions: monomialbasis.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -70,334 +70,1025 @@ │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
brezzidouglasmarini2simplex2dlocalbasis.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_BREZZIDOUGLASMARINI2_SIMPLEX2D_LOCALBASIS_HH
│ │ │ │ -
6#define DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI2_SIMPLEX2D_LOCALBASIS_HH
│ │ │ │ +
5#ifndef DUNE_MONOMIALBASIS_HH
│ │ │ │ +
6#define DUNE_MONOMIALBASIS_HH
│ │ │ │
7
│ │ │ │ -
8#include <array>
│ │ │ │ -
9#include <bitset>
│ │ │ │ -
10#include <numeric>
│ │ │ │ -
11#include <vector>
│ │ │ │ +
8#include <vector>
│ │ │ │ +
9
│ │ │ │ +
10#include <dune/common/fvector.hh>
│ │ │ │ +
11#include <dune/common/fmatrix.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:
│ │ │ │ - │ │ │ │ -
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];
│ │ │ │ +
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 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
│ │ │ │ +
78
│ │ │ │ +
79 // MonomialBasisSize
│ │ │ │ +
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
│ │ │ │ +
82 template< GeometryType::Id geometryId >
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
84 {
│ │ │ │ + │ │ │ │ +
86
│ │ │ │ +
87 public:
│ │ │ │ +
│ │ │ │ +
88 static This &instance ()
│ │ │ │ +
89 {
│ │ │ │ +
90 static This _instance;
│ │ │ │ +
91 return _instance;
│ │ │ │ +
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 }
│ │ │ │ +
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 }
│ │ │ │
│ │ │ │ -
114
│ │ │ │ +
115
│ │ │ │ +
│ │ │ │ +
116 unsigned int operator() ( const unsigned int order ) const
│ │ │ │ +
117 {
│ │ │ │ +
118 return numBaseFunctions_[ order ];
│ │ │ │ +
119 }
│ │ │ │ +
│ │ │ │ +
120
│ │ │ │
│ │ │ │ -
121 inline void evaluateJacobian(const typename Traits::DomainType& in,
│ │ │ │ -
122 std::vector<typename Traits::JacobianType>& out) const
│ │ │ │ -
123 {
│ │ │ │ -
124 out.resize(size());
│ │ │ │ +
121 unsigned int maxOrder() const
│ │ │ │ +
122 {
│ │ │ │ +
123 return maxOrder_;
│ │ │ │ +
124 }
│ │ │ │ +
│ │ │ │
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
│ │ │ │ +
│ │ │ │ +
126 void computeSizes ( unsigned int order )
│ │ │ │ +
127 {
│ │ │ │ +
128 if (order <= maxOrder_)
│ │ │ │ +
129 return;
│ │ │ │ +
130
│ │ │ │ +
131 maxOrder_ = order;
│ │ │ │
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
│ │ │ │ +
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
│ │ │ │ -
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
│ │ │ │ +
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 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]);
│ │ │ │ +
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 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]);
│ │ │ │ +
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 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]);
│ │ │ │ +
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 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]);
│ │ │ │ +
264 if constexpr ( geometry == gt)
│ │ │ │ +
265 return;
│ │ │ │ +
266 else
│ │ │ │ +
267 evaluate<gt,dimD>(deriv, order, x, block, offsets, values );
│ │ │ │ +
268 }
│ │ │ │
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]);
│ │ │ │ +
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 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];
│ │ │ │ +
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 out[8][0] = sign_[2]*(-10*in[0]);
│ │ │ │ -
286 out[8][1] = sign_[2]*(-10*in[0] + 10*in[1]);
│ │ │ │ +
285 const BaseSize &size = BaseSize::instance();
│ │ │ │ +
286 const_cast<BaseSize&>(size).computeSizes(order);
│ │ │ │
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 };
│ │ │ │ +
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 };
│ │ │ │
│ │ │ │ -
314} // end namespace Dune
│ │ │ │ -
315#endif // DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI2_SIMPLEX2D_LOCALBASIS_HH
│ │ │ │ +
789
│ │ │ │ +
790}
│ │ │ │ +
791
│ │ │ │ +
792#endif
│ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │
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
│ │ │ │ +
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,348 +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 │ │ │ │ │ - * _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 │ │ │ │ │ + * _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_BREZZIDOUGLASMARINI2_SIMPLEX2D_LOCALBASIS_HH │ │ │ │ │ -6#define DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI2_SIMPLEX2D_LOCALBASIS_HH │ │ │ │ │ +5#ifndef DUNE_MONOMIALBASIS_HH │ │ │ │ │ +6#define DUNE_MONOMIALBASIS_HH │ │ │ │ │ 7 │ │ │ │ │ -8#include │ │ │ │ │ -9#include │ │ │ │ │ -10#include │ │ │ │ │ -11#include │ │ │ │ │ +8#include │ │ │ │ │ +9 │ │ │ │ │ +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_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]; │ │ │ │ │ +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 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 │ │ │ │ │ +78 │ │ │ │ │ +79 // MonomialBasisSize │ │ │ │ │ +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 │ │ │ │ │ +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 │ │ │ │ │ -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()); │ │ │ │ │ +_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 │ │ │ │ │ -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 │ │ │ │ │ +_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 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 │ │ │ │ │ +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 │ │ │ │ │ -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 │ │ │ │ │ +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 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]); │ │ │ │ │ +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 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]); │ │ │ │ │ +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 │ │ │ │ │ -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]); │ │ │ │ │ +_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 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]); │ │ │ │ │ +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 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]); │ │ │ │ │ +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 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]; │ │ │ │ │ +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 out[8][0] = sign_[2]*(-10*in[0]); │ │ │ │ │ -286 out[8][1] = sign_[2]*(-10*in[0] + 10*in[1]); │ │ │ │ │ +285 const BaseSize &size = BaseSize::instance(); │ │ │ │ │ +286 const_cast(size).computeSizes(order); │ │ │ │ │ 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."); │ │ │ │ │ +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 } 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 │ │ │ │ │ +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 │ │ │ │ │ +_t_e_n_s_o_r_._h_h │ │ │ │ │ +_f_i_e_l_d_._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_:_:_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 │ │ │ │ │ +_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 │ │ │ │ │ -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 │ │ │ │ │ +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 │ │ │ │ │ -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 │ │ │ │ │ +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/a00410.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: brezzidouglasmarini1cube2dlocalcoefficients.hh File Reference │ │ │ │ +dune-localfunctions: field.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -65,40 +65,128 @@ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ Classes | │ │ │ │ -Namespaces
│ │ │ │ -
brezzidouglasmarini1cube2dlocalcoefficients.hh File Reference
│ │ │ │ +Namespaces | │ │ │ │ +Functions
│ │ │ │ +
field.hh File Reference
│ │ │ │ │ │ │ │
│ │ │ │ -
#include <cstddef>
│ │ │ │ -#include <vector>
│ │ │ │ -#include "../../common/localkey.hh"
│ │ │ │ +
#include <dune/common/gmpfield.hh>
│ │ │ │ +#include <dune/common/fvector.hh>
│ │ │ │ +#include <dune/common/fmatrix.hh>
│ │ │ │
│ │ │ │

Go to the source code of this file.

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

│ │ │ │ Classes

class  Dune::BDM1Cube2DLocalCoefficients
 Layout map for Brezzi-Douglas-Marini-1 elements on quadrilaterals. 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)
 
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,24 +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 │ │ │ │ │ - * _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 │ │ │ │ │ -brezzidouglasmarini1cube2dlocalcoefficients.hh File Reference │ │ │ │ │ -#include │ │ │ │ │ -#include │ │ │ │ │ -#include "_._._/_._._/_c_o_m_m_o_n_/_l_o_c_a_l_k_e_y_._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 │ │ │ │ │ +field.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_:_:_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. │ │ │ │ │ - _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/a00410_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: brezzidouglasmarini1cube2dlocalcoefficients.hh Source File │ │ │ │ +dune-localfunctions: field.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -70,78 +70,385 @@ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
brezzidouglasmarini1cube2dlocalcoefficients.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_BREZZIDOUGLASMARINI1_CUBE2D_LOCALCOEFFICIENTS_HH
│ │ │ │ -
6#define DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI1_CUBE2D_LOCALCOEFFICIENTS_HH
│ │ │ │ +
5#ifndef DUNE_LOCALFUNCTIONS_UTILITY_FIELD_HH
│ │ │ │ +
6#define DUNE_LOCALFUNCTIONS_UTILITY_FIELD_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 }
│ │ │ │ +
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 std::size_t size () const
│ │ │ │ -
39 {
│ │ │ │ -
40 return 8;
│ │ │ │ -
41 }
│ │ │ │ +
38 Field operator+ ( const Unity< Field > &u, const Field &f )
│ │ │ │ +
39 {
│ │ │ │ +
40 return (Field)u + f;
│ │ │ │ +
41 }
│ │ │ │
│ │ │ │
42
│ │ │ │ +
43 template< class Field >
│ │ │ │
│ │ │ │ -
44 const LocalKey& localKey (std::size_t i) const
│ │ │ │ -
45 {
│ │ │ │ -
46 return li[i];
│ │ │ │ -
47 }
│ │ │ │ +
44 Field operator- ( const Unity< Field > &u, const Field &f )
│ │ │ │ +
45 {
│ │ │ │ +
46 return (Field)u - f;
│ │ │ │ +
47 }
│ │ │ │
│ │ │ │
48
│ │ │ │ -
49 private:
│ │ │ │ -
50 std::vector<LocalKey> li;
│ │ │ │ -
51 };
│ │ │ │ -
│ │ │ │ -
52}
│ │ │ │ -
53#endif // DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI1_CUBE2D_LOCALCOEFFICIENTS_HH
│ │ │ │ +
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 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
│ │ │ │
Definition bdfmcube.hh:18
│ │ │ │ -
Layout map for Brezzi-Douglas-Marini-1 elements on quadrilaterals.
Definition brezzidouglasmarini1cube2dlocalcoefficients.hh:24
│ │ │ │ -
BDM1Cube2DLocalCoefficients()
Standard constructor.
Definition brezzidouglasmarini1cube2dlocalcoefficients.hh:28
│ │ │ │ -
std::size_t size() const
number of coefficients
Definition brezzidouglasmarini1cube2dlocalcoefficients.hh:38
│ │ │ │ -
const LocalKey & localKey(std::size_t i) const
get i'th index
Definition brezzidouglasmarini1cube2dlocalcoefficients.hh:44
│ │ │ │ -
Describe position of one degree of freedom.
Definition localkey.hh:24
│ │ │ │ +
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,77 +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 │ │ │ │ │ - * _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 │ │ │ │ │ -brezzidouglasmarini1cube2dlocalcoefficients.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_BREZZIDOUGLASMARINI1_CUBE2D_LOCALCOEFFICIENTS_HH │ │ │ │ │ -6#define DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI1_CUBE2D_LOCALCOEFFICIENTS_HH │ │ │ │ │ +5#ifndef DUNE_LOCALFUNCTIONS_UTILITY_FIELD_HH │ │ │ │ │ +6#define DUNE_LOCALFUNCTIONS_UTILITY_FIELD_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_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_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(8) │ │ │ │ │ -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); │ │ │ │ │ +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 } │ │ │ │ │ +35 }; │ │ │ │ │ 36 │ │ │ │ │ -_3_8 std::size_t _s_i_z_e () const │ │ │ │ │ +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 8; │ │ │ │ │ +40 return (Field)u + f; │ │ │ │ │ 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 │ │ │ │ │ +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 li[i]; │ │ │ │ │ +46 return (Field)u - f; │ │ │ │ │ 47 } │ │ │ │ │ 48 │ │ │ │ │ -49 private: │ │ │ │ │ -50 std::vector li; │ │ │ │ │ -51 }; │ │ │ │ │ -52} │ │ │ │ │ -53#endif / │ │ │ │ │ -/ DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI1_CUBE2D_LOCALCOEFFICIENTS_HH │ │ │ │ │ +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 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 } │ │ │ │ │ +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 │ │ │ │ │ _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_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_C_o_e_f_f_i_c_i_e_n_t_s_:_:_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 │ │ │ │ │ -BDM1Cube2DLocalCoefficients() │ │ │ │ │ -Standard constructor. │ │ │ │ │ -DDeeffiinniittiioonn brezzidouglasmarini1cube2dlocalcoefficients.hh:28 │ │ │ │ │ -_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_:_:_s_i_z_e │ │ │ │ │ -std::size_t size() const │ │ │ │ │ -number of coefficients │ │ │ │ │ -DDeeffiinniittiioonn brezzidouglasmarini1cube2dlocalcoefficients.hh:38 │ │ │ │ │ -_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_:_:_l_o_c_a_l_K_e_y │ │ │ │ │ -const LocalKey & localKey(std::size_t i) const │ │ │ │ │ -get i'th index │ │ │ │ │ -DDeeffiinniittiioonn brezzidouglasmarini1cube2dlocalcoefficients.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_:_:_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/a00416.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: brezzidouglasmarini1cube2dlocalbasis.hh File Reference │ │ │ │ +dune-localfunctions: basismatrix.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -65,37 +65,43 @@ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ Classes | │ │ │ │ Namespaces
│ │ │ │ -
brezzidouglasmarini1cube2dlocalbasis.hh File Reference
│ │ │ │ +
basismatrix.hh File Reference
│ │ │ │
│ │ │ │
│ │ │ │ -
#include <array>
│ │ │ │ -#include <bitset>
│ │ │ │ -#include <numeric>
│ │ │ │ -#include <vector>
│ │ │ │ -#include <dune/common/fmatrix.hh>
│ │ │ │ -#include "../../common/localbasis.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::BDM1Cube2DLocalBasis< D, R >
 First order Brezzi-Douglas-Marini shape functions on the reference quadrilateral. 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,27 +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 │ │ │ │ │ - * _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 │ │ │ │ │ + * _u_t_i_l_i_t_y │ │ │ │ │ _C_l_a_s_s_e_s | _N_a_m_e_s_p_a_c_e_s │ │ │ │ │ -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" │ │ │ │ │ +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_:_:_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_._._. │ │ │ │ │ +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/a00416_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: brezzidouglasmarini1cube2dlocalbasis.hh Source File │ │ │ │ +dune-localfunctions: basismatrix.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -70,241 +70,277 @@ │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
brezzidouglasmarini1cube2dlocalbasis.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#ifndef DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI1_CUBE2D_LOCALBASIS_HH
│ │ │ │ -
6#define DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI1_CUBE2D_LOCALBASIS_HH
│ │ │ │ +
5#ifndef DUNE_BASISMATRIX_HH
│ │ │ │ +
6#define DUNE_BASISMATRIX_HH
│ │ │ │
7
│ │ │ │ -
8#include <array>
│ │ │ │ -
9#include <bitset>
│ │ │ │ -
10#include <numeric>
│ │ │ │ -
11#include <vector>
│ │ │ │ -
12
│ │ │ │ -
13#include <dune/common/fmatrix.hh>
│ │ │ │ +
8#include <fstream>
│ │ │ │ +
9#include <dune/common/dynmatrix.hh>
│ │ │ │ +
10#include <dune/common/exceptions.hh>
│ │ │ │ +
11
│ │ │ │ + │ │ │ │ + │ │ │ │
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
│ │ │ │ -
│ │ │ │ - │ │ │ │ +
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 for (size_t i=0; i<4; i++)
│ │ │ │ -
40 sign_[i] = 1.0;
│ │ │ │ +
39 localInterpolation.interpolate( preBasis, *this );
│ │ │ │ +
40 this->invert();
│ │ │ │
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 }
│ │ │ │ +
│ │ │ │ +
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
│ │ │ │ -
│ │ │ │ -
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 }
│ │ │ │ -
│ │ │ │ +
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
│ │ │ │ -
│ │ │ │ -
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
│ │ │ │ +
│ │ │ │ +
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
│ │ │ │ -
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
│ │ │ │ +
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,255 +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 │ │ │ │ │ - * _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 │ │ │ │ │ + * _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#ifndef DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI1_CUBE2D_LOCALBASIS_HH │ │ │ │ │ -6#define DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI1_CUBE2D_LOCALBASIS_HH │ │ │ │ │ +5#ifndef DUNE_BASISMATRIX_HH │ │ │ │ │ +6#define DUNE_BASISMATRIX_HH │ │ │ │ │ 7 │ │ │ │ │ -8#include │ │ │ │ │ -9#include │ │ │ │ │ -10#include │ │ │ │ │ -11#include │ │ │ │ │ -12 │ │ │ │ │ -13#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_/_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 │ │ │ │ │ -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 () │ │ │ │ │ +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 for (size_t i=0; i<4; i++) │ │ │ │ │ -40 sign_[i] = 1.0; │ │ │ │ │ +39 localInterpolation.interpolate( preBasis, *this ); │ │ │ │ │ +40 this->invert(); │ │ │ │ │ 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 } │ │ │ │ │ +_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 │ │ │ │ │ -_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 } │ │ │ │ │ +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 │ │ │ │ │ -_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 │ │ │ │ │ +_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 &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 │ │ │ │ │ +_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 │ │ │ │ │ =============================================================================== │ │ │ │ │ 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: monomiallocalinterpolation.hh File Reference │ │ │ │ +dune-localfunctions: basisprint.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -65,41 +65,42 @@ │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ -Classes | │ │ │ │ -Namespaces
│ │ │ │ -
monomiallocalinterpolation.hh File Reference
│ │ │ │ +Namespaces | │ │ │ │ +Functions
│ │ │ │ +
basisprint.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::MonomialLocalInterpolation< LB, size >
 
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ +

│ │ │ │ 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,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 │ │ │ │ │ - * _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 │ │ │ │ │ -monomiallocalinterpolation.hh File Reference │ │ │ │ │ -#include │ │ │ │ │ -#include │ │ │ │ │ -#include │ │ │ │ │ -#include │ │ │ │ │ -#include │ │ │ │ │ + * _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_:_:_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 │ │ │ │ │   │ │ │ │ │ +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/a00419_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: monomiallocalinterpolation.hh Source File │ │ │ │ +dune-localfunctions: basisprint.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -70,114 +70,105 @@ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
monomiallocalinterpolation.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_LOCALFUNCTIONS_MONOMIAL_MONOMIALLOCALINTERPOLATION_HH
│ │ │ │ -
6#define DUNE_LOCALFUNCTIONS_MONOMIAL_MONOMIALLOCALINTERPOLATION_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");
│ │ │ │ -
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
│ │ │ │ +
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
│ │ │ │ + │ │ │ │ + │ │ │ │
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
│ │ │ │ +
void basisPrint(std::ostream &out, typename BasisFactory::Object &basis)
Definition basisprint.hh:23
│ │ │ │ +
Definition multiindex.hh:38
│ │ │ │ +
Definition polynomialbasis.hh:65
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,107 +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 │ │ │ │ │ - * _m_o_n_o_m_i_a_l │ │ │ │ │ -monomiallocalinterpolation.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_LOCALFUNCTIONS_MONOMIAL_MONOMIALLOCALINTERPOLATION_HH │ │ │ │ │ -6#define DUNE_LOCALFUNCTIONS_MONOMIAL_MONOMIALLOCALINTERPOLATION_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"); │ │ │ │ │ -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 │ │ │ │ │ +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 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 │ │ │ │ │ +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_:_:_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_:_:_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/a00422.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: monomiallocalbasis.hh File Reference │ │ │ │ +dune-localfunctions: polynomialbasis.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -65,54 +65,50 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ Classes | │ │ │ │ Namespaces
│ │ │ │ -
monomiallocalbasis.hh File Reference
│ │ │ │ +
polynomialbasis.hh File Reference
│ │ │ │
│ │ │ │
│ │ │ │ -
#include <array>
│ │ │ │ -#include <cassert>
│ │ │ │ +
#include <fstream>
│ │ │ │ #include <numeric>
│ │ │ │ #include <dune/common/fmatrix.hh>
│ │ │ │ -#include <dune/common/math.hh>
│ │ │ │ -#include "../common/localbasis.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::MonomImp::EvalAccess< Traits >
 Access output vector of evaluateFunction() and evaluate() More...
class  Dune::PolynomialBasis< Eval, CM, D, R >
 
class  Dune::MonomImp::JacobianAccess< Traits >
 Access output vector of evaluateJacobian() More...
struct  Dune::PolynomialBasis< Eval, CM, D, R >::Convert< dummy, DVector >
 
struct  Dune::MonomImp::Evaluate< Traits, c >
struct  Dune::PolynomialBasis< Eval, CM, D, R >::Convert< dummy, DomainVector >
 
struct  Dune::MonomImp::Evaluate< Traits, 1 >
 
class  Dune::MonomialLocalBasis< D, R, d, p >
class  Dune::PolynomialBasisWithMatrix< Eval, CM, D, R >
 
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ - │ │ │ │ - │ │ │ │

│ │ │ │ Namespaces

namespace  Dune
 
namespace  Dune::MonomImp
 
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,36 +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 │ │ │ │ │ - * _m_o_n_o_m_i_a_l │ │ │ │ │ + * _u_t_i_l_i_t_y │ │ │ │ │ _C_l_a_s_s_e_s | _N_a_m_e_s_p_a_c_e_s │ │ │ │ │ -monomiallocalbasis.hh File Reference │ │ │ │ │ -#include │ │ │ │ │ -#include │ │ │ │ │ +polynomialbasis.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_/_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_:_:_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_:_:_P_o_l_y_n_o_m_i_a_l_B_a_s_i_s_<_ _E_v_a_l_,_ _C_M_,_ _D_,_ _R_ _> │ │ │ │ │   │ │ │ │ │ - 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_:_:_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_:_:_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_:_:_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 │ │ │ │ │ + _> │ │ │ │ │   │ │ │ │ │ -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_:_:_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 │ │ │ │ │   │ │ │ │ │ -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/a00422_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: monomiallocalbasis.hh Source File │ │ │ │ +dune-localfunctions: polynomialbasis.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -70,304 +70,481 @@ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
monomiallocalbasis.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_LOCALFUNCTIONS_MONOMIAL_MONOMIALLOCALBASIS_HH
│ │ │ │ -
6#define DUNE_LOCALFUNCTIONS_MONOMIAL_MONOMIALLOCALBASIS_HH
│ │ │ │ +
5#ifndef DUNE_POLYNOMIALBASIS_HH
│ │ │ │ +
6#define DUNE_POLYNOMIALBASIS_HH
│ │ │ │
7
│ │ │ │ -
8#include <array>
│ │ │ │ -
9#include <cassert>
│ │ │ │ -
10#include <numeric>
│ │ │ │ -
11
│ │ │ │ -
12#include <dune/common/fmatrix.hh>
│ │ │ │ -
13#include <dune/common/math.hh>
│ │ │ │ +
8#include <fstream>
│ │ │ │ +
9#include <numeric>
│ │ │ │ +
10
│ │ │ │ +
11#include <dune/common/fmatrix.hh>
│ │ │ │ +
12
│ │ │ │ + │ │ │ │
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
│ │ │ │ -
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 };
│ │ │ │ -
│ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ +
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
│ │ │ │ -
97 template <typename Traits, int c>
│ │ │ │ -
│ │ │ │ -
98 struct Evaluate
│ │ │ │ -
99 {
│ │ │ │ -
101 constexpr static int d = Traits::dimDomain - c;
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
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
│ │ │ │ -
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
│ │ │ │ +
│ │ │ │ +
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 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 }
│ │ │ │ +
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 }
│ │ │ │
│ │ │ │ -
234
│ │ │ │ +
238
│ │ │ │ +
239 template< unsigned int deriv, class Vector >
│ │ │ │
│ │ │ │ -
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
│ │ │ │ +
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
│ │ │ │ +
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
│ │ │ │ -
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
│ │ │ │ +
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,317 +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 │ │ │ │ │ - * _m_o_n_o_m_i_a_l │ │ │ │ │ -monomiallocalbasis.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_LOCALFUNCTIONS_MONOMIAL_MONOMIALLOCALBASIS_HH │ │ │ │ │ -6#define DUNE_LOCALFUNCTIONS_MONOMIAL_MONOMIALLOCALBASIS_HH │ │ │ │ │ +5#ifndef DUNE_POLYNOMIALBASIS_HH │ │ │ │ │ +6#define DUNE_POLYNOMIALBASIS_HH │ │ │ │ │ 7 │ │ │ │ │ -8#include │ │ │ │ │ -9#include │ │ │ │ │ -10#include │ │ │ │ │ -11 │ │ │ │ │ -12#include │ │ │ │ │ -13#include │ │ │ │ │ +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 "../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 }; │ │ │ │ │ +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 │ │ │ │ │ +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 │ │ │ │ │ -97 template │ │ │ │ │ -_9_8 struct _E_v_a_l_u_a_t_e │ │ │ │ │ +_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 { │ │ │ │ │ -_1_0_1 constexpr static int _d = Traits::dimDomain - c; │ │ │ │ │ +100 return _b_a_s_i_s__; │ │ │ │ │ +101 } │ │ │ │ │ 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); │ │ │ │ │ +_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 } │ │ │ │ │ -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; │ │ │ │ │ +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 │ │ │ │ │ -_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 () │ │ │ │ │ +179 } │ │ │ │ │ +180 │ │ │ │ │ +181 template< unsigned int deriv, class F > │ │ │ │ │ +_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 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) │ │ │ │ │ +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 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 │ │ │ │ │ +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 │ │ │ │ │ +_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 │ │ │ │ │ +_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_:_:_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_:_:_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 │ │ │ │ │ +_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 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< │ │ │ │ │ +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 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 │ │ │ │ │ +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/a00425.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: monomiallocalcoefficients.hh File Reference │ │ │ │ +dune-localfunctions: multiindex.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -65,39 +65,78 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ Classes | │ │ │ │ -Namespaces
│ │ │ │ -
monomiallocalcoefficients.hh File Reference
│ │ │ │ +Namespaces | │ │ │ │ +Functions
│ │ │ │ +
multiindex.hh File Reference
│ │ │ │ │ │ │ │
│ │ │ │ -
#include <cstddef>
│ │ │ │ -#include <vector>
│ │ │ │ -#include "../common/localkey.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::MonomialLocalCoefficients< static_size >
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,21 +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 │ │ │ │ │ - * _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 │ │ │ │ │ -monomiallocalcoefficients.hh File Reference │ │ │ │ │ -#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 │ │ │ │ │ +multiindex.hh File Reference │ │ │ │ │ #include │ │ │ │ │ -#include "_._._/_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> │ │ │ │ │ _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_:_:_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/a00425_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: monomiallocalcoefficients.hh Source File │ │ │ │ +dune-localfunctions: multiindex.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -70,77 +70,657 @@ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
monomiallocalcoefficients.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_LOCALFUNCTIONS_MONOMIAL_MONOMIALLOCALCOEFFICIENTS_HH
│ │ │ │ -
6#define DUNE_LOCALFUNCTIONS_MONOMIAL_MONOMIALLOCALCOEFFICIENTS_HH
│ │ │ │ +
5#ifndef DUNE_MULTIINDEX_HH
│ │ │ │ +
6#define DUNE_MULTIINDEX_HH
│ │ │ │
7
│ │ │ │ -
8#include <cstddef>
│ │ │ │ -
9#include <vector>
│ │ │ │ +
8#include <vector>
│ │ │ │ +
9#include <ostream>
│ │ │ │
10
│ │ │ │ -
11#include "../common/localkey.hh"
│ │ │ │ -
12
│ │ │ │ -
13namespace Dune
│ │ │ │ -
14{
│ │ │ │ +
11#include <dune/common/ftraits.hh>
│ │ │ │ +
12#include <dune/common/fvector.hh>
│ │ │ │ +
13
│ │ │ │ + │ │ │ │
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
│ │ │ │ -
│ │ │ │ -
36 std::size_t size () const
│ │ │ │ -
37 {
│ │ │ │ -
38 return static_size;
│ │ │ │ -
39 }
│ │ │ │ -
│ │ │ │ +
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
│ │ │ │ -
│ │ │ │ -
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
│ │ │ │ +
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
│ │ │ │ + │ │ │ │
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
│ │ │ │ +
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,73 +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 │ │ │ │ │ - * _m_o_n_o_m_i_a_l │ │ │ │ │ -monomiallocalcoefficients.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_LOCALFUNCTIONS_MONOMIAL_MONOMIALLOCALCOEFFICIENTS_HH │ │ │ │ │ -6#define DUNE_LOCALFUNCTIONS_MONOMIAL_MONOMIALLOCALCOEFFICIENTS_HH │ │ │ │ │ +5#ifndef DUNE_MULTIINDEX_HH │ │ │ │ │ +6#define DUNE_MULTIINDEX_HH │ │ │ │ │ 7 │ │ │ │ │ -8#include │ │ │ │ │ -9#include │ │ │ │ │ +8#include │ │ │ │ │ +9#include │ │ │ │ │ 10 │ │ │ │ │ -11#include "../common/localkey.hh" │ │ │ │ │ -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_/_u_t_i_l_i_t_y_/_f_i_e_l_d_._h_h> │ │ │ │ │ 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 std::size_t _s_i_z_e () const │ │ │ │ │ -37 { │ │ │ │ │ -38 return static_size; │ │ │ │ │ -39 } │ │ │ │ │ +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_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 │ │ │ │ │ +_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 │ │ │ │ │ _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_:_:_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/a00428.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: hierarchical.hh File Reference │ │ │ │ +dune-localfunctions: l2interpolation.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -65,31 +65,48 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
hierarchical.hh File Reference
│ │ │ │ +
│ │ │ │ +Classes | │ │ │ │ +Namespaces
│ │ │ │ +
l2interpolation.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 <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.

│ │ │ │ -

Detailed Description

│ │ │ │ -

Convenience header that includes all available hierarchical LocalFiniteElements.

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

│ │ │ │ +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...
 
│ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ +

│ │ │ │ +Namespaces

namespace  Dune
 
│ │ │ │ +
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,18 +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 │ │ │ │ │ -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> │ │ │ │ │ + * _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_. │ │ │ │ │ -********** DDeettaaiilleedd DDeessccrriippttiioonn ********** │ │ │ │ │ -Convenience header that includes all available hierarchical │ │ │ │ │ -LocalFiniteElements. │ │ │ │ │ +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_._._. │ │ │ │ │ +  │ │ │ │ │ +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/a00428_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: hierarchical.hh Source File │ │ │ │ +dune-localfunctions: l2interpolation.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -70,31 +70,242 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
hierarchical.hh
│ │ │ │ +
l2interpolation.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
│ │ │ │ +
7
│ │ │ │ +
8#include <dune/common/concept.hh>
│ │ │ │ +
9#include <dune/common/dynmatrix.hh>
│ │ │ │ +
10
│ │ │ │ +
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 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
│ │ │ │ + │ │ │ │ +
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
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,22 +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 │ │ │ │ │ -hierarchical.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// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- │ │ │ │ │ 2// vi: set et ts=4 sw=2 sts=2: │ │ │ │ │ 3// SPDX-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_L2INTERPOLATION_HH │ │ │ │ │ +6#define DUNE_L2INTERPOLATION_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_/_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 │ │ │ │ │ +_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 │ │ │ │ │ +_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 │ │ │ │ │ =============================================================================== │ │ │ │ │ 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: crouzeixraviart.hh File Reference │ │ │ │ +dune-localfunctions: dglocalcoefficients.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -65,40 +65,37 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ Classes | │ │ │ │ Namespaces
│ │ │ │ -
crouzeixraviart.hh File Reference
│ │ │ │ +
dglocalcoefficients.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 <cassert>
│ │ │ │ +#include <vector>
│ │ │ │ +#include <dune/localfunctions/common/localkey.hh>
│ │ │ │
│ │ │ │

Go to the source code of this file.

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

│ │ │ │ Classes

class  Dune::CrouzeixRaviartLocalFiniteElement< D, R, dim >
 Crouzeix-Raviart finite element. 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,27 +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 │ │ │ │ │ + * _u_t_i_l_i_t_y │ │ │ │ │ _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> │ │ │ │ │ +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_:_:_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_._._. │ │ │ │ │ + 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/a00431_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: crouzeixraviart.hh Source File │ │ │ │ +dune-localfunctions: dglocalcoefficients.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -70,230 +70,117 @@ │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
crouzeixraviart.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_CROUZEIXRAVIART_HH
│ │ │ │ -
6#define DUNE_LOCALFUNCTIONS_CROUZEIXRAVIART_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
│ │ │ │ -
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> >;
│ │ │ │ + │ │ │ │ +
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
│ │ │ │ -
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;
│ │ │ │ +
│ │ │ │ +
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 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
│ │ │ │ - │ │ │ │ - │ │ │ │ +
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 )
│ │ │ │ +
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
│ │ │ │ + │ │ │ │
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
│ │ │ │ - │ │ │ │ +
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,243 +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 │ │ │ │ │ -crouzeixraviart.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_CROUZEIXRAVIART_HH │ │ │ │ │ -6#define DUNE_LOCALFUNCTIONS_CROUZEIXRAVIART_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 │ │ │ │ │ -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 │ │ │ │ │ ->; │ │ │ │ │ +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 │ │ │ │ │ -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; │ │ │ │ │ +_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 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 │ │ │ │ │ +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 ) │ │ │ │ │ +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 │ │ │ │ │ -_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_:_:_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_:_:_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/a00434.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: mimetic.hh File Reference │ │ │ │ +dune-localfunctions: defaultbasisfactory.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -65,33 +65,37 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ Classes | │ │ │ │ Namespaces
│ │ │ │ -
mimetic.hh File Reference
│ │ │ │ +
defaultbasisfactory.hh File Reference
│ │ │ │
│ │ │ │
│ │ │ │ -
#include <dune/geometry/type.hh>
│ │ │ │ -#include "common/localfiniteelementtraits.hh"
│ │ │ │ -#include "mimetic/mimeticall.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::MimeticLocalFiniteElement< D, R, dim >
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,20 +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 │ │ │ │ │ _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" │ │ │ │ │ +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_:_:_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_ _> │ │ │ │ │ +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/a00434_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: mimetic.hh Source File │ │ │ │ +dune-localfunctions: defaultbasisfactory.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -70,112 +70,151 @@ │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
mimetic.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_MIMETICLOCALFINITEELEMENT_HH
│ │ │ │ -
6#define DUNE_MIMETICLOCALFINITEELEMENT_HH
│ │ │ │ +
5#ifndef DUNE_DEFAULTBASISFACTORY_HH
│ │ │ │ +
6#define DUNE_DEFAULTBASISFACTORY_HH
│ │ │ │
7
│ │ │ │ -
8#include <dune/geometry/type.hh>
│ │ │ │ -
9
│ │ │ │ - │ │ │ │ -
11#include "mimetic/mimeticall.hh"
│ │ │ │ +
8#include <fstream>
│ │ │ │ +
9#include <dune/common/exceptions.hh>
│ │ │ │ +
10
│ │ │ │ + │ │ │ │
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 }
│ │ │ │ +
│ │ │ │ +
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 Dune::GeometryType type () const { return gt; }
│ │ │ │ -
62 };
│ │ │ │ -
│ │ │ │ -
63}
│ │ │ │ -
64
│ │ │ │ -
65#endif
│ │ │ │ - │ │ │ │ - │ │ │ │ +
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
│ │ │ │ + │ │ │ │
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
│ │ │ │ +
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,122 +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 │ │ │ │ │ -mimetic.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_MIMETICLOCALFINITEELEMENT_HH │ │ │ │ │ -6#define DUNE_MIMETICLOCALFINITEELEMENT_HH │ │ │ │ │ +5#ifndef DUNE_DEFAULTBASISFACTORY_HH │ │ │ │ │ +6#define DUNE_DEFAULTBASISFACTORY_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" │ │ │ │ │ +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> │ │ │ │ │ 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 } │ │ │ │ │ +_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 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 │ │ │ │ │ -_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 │ │ │ │ │ +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 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 │ │ │ │ │ _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_:_:_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/a00437.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: lfematrix.hh File Reference │ │ │ │ +dune-localfunctions: basisevaluator.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -71,40 +71,46 @@ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ Classes | │ │ │ │ -Namespaces | │ │ │ │ -Functions
│ │ │ │ -
lfematrix.hh File Reference
│ │ │ │ +Namespaces
│ │ │ │ +
basisevaluator.hh File Reference
│ │ │ │ │ │ │ │
│ │ │ │ -
#include <cassert>
│ │ │ │ -#include <vector>
│ │ │ │ -#include "field.hh"
│ │ │ │ +
#include <vector>
│ │ │ │ +#include <dune/common/fmatrix.hh>
│ │ │ │ +#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>
│ │ │ │
│ │ │ │

Go to the source code of this file.

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

│ │ │ │ Classes

class  Dune::LFEMatrix< F >
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
 
│ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │

│ │ │ │ -Functions

template<class Field >
std::ostream & Dune::operator<< (std::ostream &out, const LFEMatrix< Field > &mat)
 
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,26 +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 │ │ │ │ │ * _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 │ │ │ │ │ +_C_l_a_s_s_e_s | _N_a_m_e_s_p_a_c_e_s │ │ │ │ │ +basisevaluator.hh File Reference │ │ │ │ │ #include │ │ │ │ │ -#include "_f_i_e_l_d_._h_h" │ │ │ │ │ +#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> │ │ │ │ │ _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_ _> │ │ │ │ │ +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 │ │ │ │ │   │ │ │ │ │ -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/a00437_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: lfematrix.hh Source File │ │ │ │ +dune-localfunctions: basisevaluator.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -74,224 +74,275 @@ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ -
lfematrix.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_UTILITY_LFEMATRIX_HH
│ │ │ │ -
6#define DUNE_LOCALFUNCTIONS_UTILITY_LFEMATRIX_HH
│ │ │ │ +
5#ifndef DUNE_BASISEVALUATOR_HH
│ │ │ │ +
6#define DUNE_BASISEVALUATOR_HH
│ │ │ │
7
│ │ │ │ -
8#include <cassert>
│ │ │ │ -
9#include <vector>
│ │ │ │ -
10
│ │ │ │ -
11#include "field.hh"
│ │ │ │ -
12
│ │ │ │ -
13namespace Dune
│ │ │ │ -
14{
│ │ │ │ +
8#include <vector>
│ │ │ │ +
9
│ │ │ │ +
10#include <dune/common/fmatrix.hh>
│ │ │ │ +
11#include <dune/common/fvector.hh>
│ │ │ │ +
12#include <dune/common/typetraits.hh>
│ │ │ │ +
13
│ │ │ │ +
14#include <dune/geometry/type.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;
│ │ │ │ -
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 }
│ │ │ │ -
│ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ +
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>
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
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 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 }
│ │ │ │ +
43 template <unsigned int deriv>
│ │ │ │ +
│ │ │ │ +
44 struct Iterator
│ │ │ │ +
45 {
│ │ │ │ + │ │ │ │ + │ │ │ │ +
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 }
│ │ │ │ +
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 {}
│ │ │ │
│ │ │ │ -
164}
│ │ │ │
165
│ │ │ │ -
166#endif // #ifndef DUNE_LOCALFUNCTIONS_UTILITY_LFEMATRIX_HH
│ │ │ │ - │ │ │ │ +
166 private:
│ │ │ │ + │ │ │ │ +
168 using Base::basis_;
│ │ │ │ +
169 using Base::container_;
│ │ │ │ +
170 };
│ │ │ │ +
│ │ │ │ +
171
│ │ │ │ +
172}
│ │ │ │ +
173
│ │ │ │ +
174#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
│ │ │ │ -
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
│ │ │ │ +
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,223 +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 │ │ │ │ │ * _u_t_i_l_i_t_y │ │ │ │ │ -lfematrix.hh │ │ │ │ │ +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_UTILITY_LFEMATRIX_HH │ │ │ │ │ -6#define DUNE_LOCALFUNCTIONS_UTILITY_LFEMATRIX_HH │ │ │ │ │ +5#ifndef DUNE_BASISEVALUATOR_HH │ │ │ │ │ +6#define DUNE_BASISEVALUATOR_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 │ │ │ │ │ +10#include │ │ │ │ │ +11#include │ │ │ │ │ +12#include │ │ │ │ │ +13 │ │ │ │ │ +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; │ │ │ │ │ -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 & () │ │ │ │ │ +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 │ │ │ │ │ +29 template │ │ │ │ │ +_3_0 struct _M_o_n_o_m_i_a_l_E_v_a_l_u_a_t_o_r │ │ │ │ │ 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 _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 │ │ │ │ │ -_4_3 const _F_i_e_l_d &operator() ( const unsigned int row, const unsigned int col ) │ │ │ │ │ -const │ │ │ │ │ -44 { │ │ │ │ │ -45 assert(row │ │ │ │ │ +_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 _F_i_e_l_d &operator() ( const unsigned int row, const unsigned int col ) │ │ │ │ │ +_5_0 unsigned int _s_i_z_e() const │ │ │ │ │ 51 { │ │ │ │ │ -52 assert(row p(rows()); │ │ │ │ │ -93 for (unsigned int j=0; j │ │ │ │ │ +_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 // pivot search │ │ │ │ │ -98 unsigned int r = j; │ │ │ │ │ -99 _F_i_e_l_d max = abs( (*this)(j,j) ); │ │ │ │ │ -100 for (unsigned int i=j+1; i 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) │ │ │ │ │ +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 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)); │ │ │ │ │ +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 out << std::endl; │ │ │ │ │ -161 } │ │ │ │ │ -162 return out; │ │ │ │ │ -163 } │ │ │ │ │ -164} │ │ │ │ │ +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#endif // #ifndef DUNE_LOCALFUNCTIONS_UTILITY_LFEMATRIX_HH │ │ │ │ │ +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 │ │ │ │ │ +_t_e_n_s_o_r_._h_h │ │ │ │ │ _f_i_e_l_d_._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_:_:_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_:_:_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/a00440.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: field.hh File Reference │ │ │ │ +dune-localfunctions: lfematrix.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -73,120 +73,38 @@ │ │ │ │
│ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ Classes | │ │ │ │ Namespaces | │ │ │ │ Functions
│ │ │ │ -
field.hh File Reference
│ │ │ │ +
lfematrix.hh File Reference
│ │ │ │
│ │ │ │
│ │ │ │ -
#include <dune/common/gmpfield.hh>
│ │ │ │ -#include <dune/common/fvector.hh>
│ │ │ │ -#include <dune/common/fmatrix.hh>
│ │ │ │ +
#include <cassert>
│ │ │ │ +#include <vector>
│ │ │ │ +#include "field.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::LFEMatrix< F >
 
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ 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)
 
template<class Field >
std::ostream & Dune::operator<< (std::ostream &out, const LFEMatrix< Field > &mat)
 
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -2,126 +2,25 @@ │ │ │ │ │ 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 │ │ │ │ │ -#include │ │ │ │ │ -#include │ │ │ │ │ +lfematrix.hh File Reference │ │ │ │ │ +#include │ │ │ │ │ +#include │ │ │ │ │ +#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 │ │ │ │ │ -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_:_:_L_F_E_M_a_t_r_i_x_<_ _F_ _> │ │ │ │ │   │ │ │ │ │ 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) │ │ │ │ │ +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/a00440_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: field.hh Source File │ │ │ │ +dune-localfunctions: lfematrix.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -74,381 +74,224 @@ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ -
field.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_LOCALFUNCTIONS_UTILITY_FIELD_HH
│ │ │ │ -
6#define DUNE_LOCALFUNCTIONS_UTILITY_FIELD_HH
│ │ │ │ +
5#ifndef DUNE_LOCALFUNCTIONS_UTILITY_LFEMATRIX_HH
│ │ │ │ +
6#define DUNE_LOCALFUNCTIONS_UTILITY_LFEMATRIX_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 }
│ │ │ │ +
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 template< class Field >
│ │ │ │ -
│ │ │ │ -
44 Field operator- ( const Unity< Field > &u, const Field &f )
│ │ │ │ -
45 {
│ │ │ │ -
46 return (Field)u - f;
│ │ │ │ -
47 }
│ │ │ │ +
│ │ │ │ +
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 }
│ │ │ │
│ │ │ │ -
48
│ │ │ │ -
49 template< class Field >
│ │ │ │ +
49
│ │ │ │
│ │ │ │ -
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 }
│ │ │ │ +
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 }
│ │ │ │
│ │ │ │ -
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 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
│ │ │ │ +
│ │ │ │ +
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
│ │ │ │ -
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
│ │ │ │ +
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
│ │ │ │ -
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
│ │ │ │ +
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,351 +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 │ │ │ │ │ * _u_t_i_l_i_t_y │ │ │ │ │ -field.hh │ │ │ │ │ +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_LOCALFUNCTIONS_UTILITY_FIELD_HH │ │ │ │ │ -6#define DUNE_LOCALFUNCTIONS_UTILITY_FIELD_HH │ │ │ │ │ +5#ifndef DUNE_LOCALFUNCTIONS_UTILITY_LFEMATRIX_HH │ │ │ │ │ +6#define DUNE_LOCALFUNCTIONS_UTILITY_LFEMATRIX_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; │ │ │ │ │ +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 │ │ │ │ │ -_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 ) │ │ │ │ │ +_4_3 const _F_i_e_l_d &operator() ( const unsigned int row, const unsigned int col ) │ │ │ │ │ +const │ │ │ │ │ +44 { │ │ │ │ │ +45 assert(row │ │ │ │ │ -_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 │ │ │ │ │ +52 assert(row │ │ │ │ │ -_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 │ │ │ │ │ +_6_2 unsigned int _c_o_l_s () const │ │ │ │ │ +63 { │ │ │ │ │ +64 return cols_; │ │ │ │ │ +65 } │ │ │ │ │ +66 │ │ │ │ │ +_6_7 const _F_i_e_l_d *_r_o_w_P_t_r ( const unsigned int row ) const │ │ │ │ │ +68 { │ │ │ │ │ +69 assert(row p(rows()); │ │ │ │ │ +93 for (unsigned int j=0; j │ │ │ │ │ -_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 ); │ │ │ │ │ +97 // pivot search │ │ │ │ │ +98 unsigned int r = j; │ │ │ │ │ +99 _F_i_e_l_d max = abs( (*this)(j,j) ); │ │ │ │ │ +100 for (unsigned int i=j+1; i 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 │ │ │ │ │ -_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_ _> & ) │ │ │ │ │ +117 // transformation │ │ │ │ │ +118 _F_i_e_l_d hr = _U_n_i_t_y_<_F_i_e_l_d_>()/(*this)(j,j); │ │ │ │ │ +119 for (unsigned int i=0; i_:_:_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 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 │ │ │ │ │ +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 │ │ │ │ │ +_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_:_:_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_:_:_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_:_:_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_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/a00443.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: coeffmatrix.hh File Reference │ │ │ │ +dune-localfunctions: interpolationhelper.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -72,33 +72,31 @@ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │
│ │ │ │
│ │ │ │ Classes | │ │ │ │ Namespaces
│ │ │ │ -
coeffmatrix.hh File Reference
│ │ │ │ +
interpolationhelper.hh File Reference
│ │ │ │
│ │ │ │
│ │ │ │ -
#include <cassert>
│ │ │ │ -#include <iostream>
│ │ │ │ -#include <vector>
│ │ │ │ +
#include <vector>
│ │ │ │ #include <dune/common/fvector.hh>
│ │ │ │ -#include <dune/localfunctions/utility/field.hh>
│ │ │ │ -#include <dune/localfunctions/utility/tensor.hh>
│ │ │ │ +#include <dune/common/concept.hh>
│ │ │ │ +#include <dune/localfunctions/utility/field.hh>
│ │ │ │
│ │ │ │

Go to the source code of this file.

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

│ │ │ │ Classes

struct  Dune::Mult< Field, Field2 >
struct  Dune::InterpolationHelper< F, dimension >
 
struct  Dune::Mult< Field, FieldVector< Field2, dimRange > >
struct  Dune::InterpolationHelper< F, dimension >::Helper< Func, Vector, true >
 
class  Dune::SparseCoeffMatrix< F, bSize >
struct  Dune::InterpolationHelper< F, dimension >::Helper< Basis, Matrix, false >
 
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ Namespaces

namespace  Dune
 
│ │ │ │ ├── html2text {} │ │ │ │ │ @@ -2,27 +2,27 @@ │ │ │ │ │ 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 │ │ │ │ │ -coeffmatrix.hh File Reference │ │ │ │ │ -#include │ │ │ │ │ -#include │ │ │ │ │ +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> │ │ │ │ │ -#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_u_l_t_<_ _F_i_e_l_d_,_ _F_i_e_l_d_2_ _> │ │ │ │ │ +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_:_:_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_ _>_ _> │ │ │ │ │ +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 │ │ │ │ │ + _> │ │ │ │ │   │ │ │ │ │ - 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_:_:_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/a00443_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: coeffmatrix.hh Source File │ │ │ │ +dune-localfunctions: interpolationhelper.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -74,334 +74,195 @@ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ -
coeffmatrix.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_COEFFMATRIX_HH
│ │ │ │ -
6#define DUNE_COEFFMATRIX_HH
│ │ │ │ -
7#include <cassert>
│ │ │ │ -
8#include <iostream>
│ │ │ │ -
9#include <vector>
│ │ │ │ +
5#ifndef GENERIC_INTERPOLATIONHELPER_HH
│ │ │ │ +
6#define GENERIC_INTERPOLATIONHELPER_HH
│ │ │ │ +
7
│ │ │ │ +
8#include <vector>
│ │ │ │ +
9
│ │ │ │
10#include <dune/common/fvector.hh>
│ │ │ │ - │ │ │ │ - │ │ │ │ +
11#include <dune/common/concept.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 {}
│ │ │ │ +
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 }
│ │ │ │
│ │ │ │ -
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 }
│ │ │ │ +
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 BasisIterator, class Vector>
│ │ │ │ +
104 template <class DomainVector>
│ │ │ │
│ │ │ │ -
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
│ │ │ │ - │ │ │ │ - │ │ │ │ +
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
│ │ │ │
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
│ │ │ │ +
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,347 +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 │ │ │ │ │ * _u_t_i_l_i_t_y │ │ │ │ │ -coeffmatrix.hh │ │ │ │ │ +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_COEFFMATRIX_HH │ │ │ │ │ -6#define DUNE_COEFFMATRIX_HH │ │ │ │ │ -7#include │ │ │ │ │ -8#include │ │ │ │ │ -9#include │ │ │ │ │ +5#ifndef GENERIC_INTERPOLATIONHELPER_HH │ │ │ │ │ +6#define GENERIC_INTERPOLATIONHELPER_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_/_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> │ │ │ │ │ +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 /************************************************* │ │ │ │ │ -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 > │ │ │ │ │ +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 { │ │ │ │ │ -_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() │ │ │ │ │ +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 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 │ │ │ │ │ +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 { │ │ │ │ │ -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 } │ │ │ │ │ +_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 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 │ │ │ │ │ +104 template │ │ │ │ │ +_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 │ │ │ │ │ -_t_e_n_s_o_r_._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 │ │ │ │ │ +_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 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 │ │ │ │ │ +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/a00446.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: monomialbasis.hh File Reference │ │ │ │ +dune-localfunctions: crouzeixraviart.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -65,60 +65,40 @@ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ Classes | │ │ │ │ Namespaces
│ │ │ │ -
monomialbasis.hh File Reference
│ │ │ │ +
crouzeixraviart.hh File Reference
│ │ │ │
│ │ │ │
│ │ │ │ -
#include <vector>
│ │ │ │ -#include <dune/common/fvector.hh>
│ │ │ │ +
#include <array>
│ │ │ │ +#include <numeric>
│ │ │ │ #include <dune/common/fmatrix.hh>
│ │ │ │ +#include <dune/common/fvector.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>
│ │ │ │ +#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::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 >
class  Dune::CrouzeixRaviartLocalFiniteElement< D, R, dim >
 Crouzeix-Raviart finite element. More...
 
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ Namespaces

namespace  Dune
 
│ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,49 +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 │ │ │ │ │ _C_l_a_s_s_e_s | _N_a_m_e_s_p_a_c_e_s │ │ │ │ │ -monomialbasis.hh File Reference │ │ │ │ │ -#include │ │ │ │ │ -#include │ │ │ │ │ +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_/_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> │ │ │ │ │ +#include <_d_u_n_e_/_l_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_:_:_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 │ │ │ │ │ - _> │ │ │ │ │ +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/a00446_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: monomialbasis.hh Source File │ │ │ │ +dune-localfunctions: crouzeixraviart.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -70,1025 +70,230 @@ │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
monomialbasis.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_MONOMIALBASIS_HH
│ │ │ │ -
6#define DUNE_MONOMIALBASIS_HH
│ │ │ │ +
5#ifndef DUNE_LOCALFUNCTIONS_CROUZEIXRAVIART_HH
│ │ │ │ +
6#define DUNE_LOCALFUNCTIONS_CROUZEIXRAVIART_HH
│ │ │ │
7
│ │ │ │ -
8#include <vector>
│ │ │ │ -
9
│ │ │ │ -
10#include <dune/common/fvector.hh>
│ │ │ │ +
8#include <array>
│ │ │ │ +
9#include <numeric>
│ │ │ │ +
10
│ │ │ │
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 ************************************************/
│ │ │ │ +
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 // 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 {
│ │ │ │ - │ │ │ │ +
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 public:
│ │ │ │ -
│ │ │ │ -
88 static This &instance ()
│ │ │ │ -
89 {
│ │ │ │ -
90 static This _instance;
│ │ │ │ -
91 return _instance;
│ │ │ │ -
92 }
│ │ │ │ -
│ │ │ │ +
87 out.resize(size());
│ │ │ │ +
88
│ │ │ │ +
89 if (totalOrder == 0) {
│ │ │ │ +
90 evaluateFunction(in, out);
│ │ │ │ +
91 return;
│ │ │ │ +
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 };
│ │ │ │ -
│ │ │ │ +
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
│ │ │ │ -
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;
│ │ │ │ +
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
│ │ │ │ -
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 }
│ │ │ │ +
│ │ │ │ +
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 };
│ │ │ │
│ │ │ │ -
225 };
│ │ │ │ -
│ │ │ │ -
226
│ │ │ │ -
227
│ │ │ │ -
228
│ │ │ │ -
229 // MonomialBasisImpl
│ │ │ │ -
230 // -----------------
│ │ │ │ -
231
│ │ │ │ -
232 template< GeometryType::Id geometryId, class F>
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
234 {
│ │ │ │ -
235 public:
│ │ │ │ -
236 typedef F Field;
│ │ │ │ +
235
│ │ │ │ +
236} // namespace Dune
│ │ │ │
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
│ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ +
238#endif // DUNE_LOCALFUNCTIONS_CROUZEIXRAVIART_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
│ │ │ │ -
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
│ │ │ │ +
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
│ │ │ │ + │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,1112 +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 │ │ │ │ │ - * _u_t_i_l_i_t_y │ │ │ │ │ -monomialbasis.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_MONOMIALBASIS_HH │ │ │ │ │ -6#define DUNE_MONOMIALBASIS_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 │ │ │ │ │ -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 ************************************************/ │ │ │ │ │ +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 // 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 │ │ │ │ │ +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 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; │ │ │ │ │ +85 auto totalOrder = std::accumulate(order.begin(), order.end(), 0); │ │ │ │ │ 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; │ │ │ │ │ +87 out.resize(size()); │ │ │ │ │ +88 │ │ │ │ │ +89 if (totalOrder == 0) { │ │ │ │ │ +90 evaluateFunction(in, out); │ │ │ │ │ +91 return; │ │ │ │ │ 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 ) │ │ │ │ │ +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 _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 }; │ │ │ │ │ +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 │ │ │ │ │ -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; │ │ │ │ │ +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 │ │ │ │ │ -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; │ │ │ │ │ +_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 │ │ │ │ │ -_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 │ │ │ │ │ +238#endif // DUNE_LOCALFUNCTIONS_CROUZEIXRAVIART_HH │ │ │ │ │ +_l_o_c_a_l_k_e_y_._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_:_:_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 │ │ │ │ │ +_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 │ │ │ │ │ =============================================================================== │ │ │ │ │ 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: basisevaluator.hh File Reference │ │ │ │ +dune-localfunctions: monomiallocalinterpolation.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -65,46 +65,35 @@ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ Classes | │ │ │ │ Namespaces
│ │ │ │ -
basisevaluator.hh File Reference
│ │ │ │ +
monomiallocalinterpolation.hh File Reference
│ │ │ │
│ │ │ │
│ │ │ │
#include <vector>
│ │ │ │ -#include <dune/common/fmatrix.hh>
│ │ │ │ #include <dune/common/fvector.hh>
│ │ │ │ -#include <dune/common/typetraits.hh>
│ │ │ │ +#include <dune/common/fmatrix.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/quadraturerules.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::MonomialLocalInterpolation< LB, size >
 
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ Namespaces

namespace  Dune
 
│ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,34 +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 │ │ │ │ │ - * _u_t_i_l_i_t_y │ │ │ │ │ + * _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 │ │ │ │ │ -basisevaluator.hh File Reference │ │ │ │ │ +monomiallocalinterpolation.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 │ │ │ │ │ _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_:_:_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/a00449_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: basisevaluator.hh Source File │ │ │ │ +dune-localfunctions: monomiallocalinterpolation.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -70,279 +70,114 @@ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
basisevaluator.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_BASISEVALUATOR_HH
│ │ │ │ -
6#define DUNE_BASISEVALUATOR_HH
│ │ │ │ +
5#ifndef DUNE_LOCALFUNCTIONS_MONOMIAL_MONOMIALLOCALINTERPOLATION_HH
│ │ │ │ +
6#define DUNE_LOCALFUNCTIONS_MONOMIAL_MONOMIALLOCALINTERPOLATION_HH
│ │ │ │
7
│ │ │ │
8#include <vector>
│ │ │ │
9
│ │ │ │ -
10#include <dune/common/fmatrix.hh>
│ │ │ │ -
11#include <dune/common/fvector.hh>
│ │ │ │ -
12#include <dune/common/typetraits.hh>
│ │ │ │ -
13
│ │ │ │ -
14#include <dune/geometry/type.hh>
│ │ │ │ +
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
│ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ -
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>
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
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 };
│ │ │ │ -
│ │ │ │ +
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");
│ │ │ │ +
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 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
│ │ │ │ +
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 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
│ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ +
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
│ │ │ │ -
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
│ │ │ │ +
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,323 +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 │ │ │ │ │ - * _u_t_i_l_i_t_y │ │ │ │ │ -basisevaluator.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_BASISEVALUATOR_HH │ │ │ │ │ -6#define DUNE_BASISEVALUATOR_HH │ │ │ │ │ +5#ifndef DUNE_LOCALFUNCTIONS_MONOMIAL_MONOMIALLOCALINTERPOLATION_HH │ │ │ │ │ +6#define DUNE_LOCALFUNCTIONS_MONOMIAL_MONOMIALLOCALINTERPOLATION_HH │ │ │ │ │ 7 │ │ │ │ │ 8#include │ │ │ │ │ 9 │ │ │ │ │ -10#include │ │ │ │ │ -11#include │ │ │ │ │ -12#include │ │ │ │ │ -13 │ │ │ │ │ -14#include │ │ │ │ │ +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 * 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 │ │ │ │ │ -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 }; │ │ │ │ │ +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"); │ │ │ │ │ +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 │ │ │ │ │ -_5_0 unsigned int _s_i_z_e() const │ │ │ │ │ -51 { │ │ │ │ │ -52 return _s_i_z_e__; │ │ │ │ │ +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 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 │ │ │ │ │ +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 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 │ │ │ │ │ +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 │ │ │ │ │ _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_:_:_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 │ │ │ │ │ =============================================================================== │ │ │ │ │ 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: dglocalcoefficients.hh File Reference │ │ │ │ +dune-localfunctions: monomiallocalcoefficients.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -65,37 +65,33 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ Classes | │ │ │ │ Namespaces
│ │ │ │ -
dglocalcoefficients.hh File Reference
│ │ │ │ +
monomiallocalcoefficients.hh File Reference
│ │ │ │
│ │ │ │
│ │ │ │ -
#include <cassert>
│ │ │ │ +
#include <cstddef>
│ │ │ │ #include <vector>
│ │ │ │ -#include <dune/localfunctions/common/localkey.hh>
│ │ │ │ +#include "../common/localkey.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...
class  Dune::MonomialLocalCoefficients< static_size >
 
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ Namespaces

namespace  Dune
 
│ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,25 +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 │ │ │ │ │ - * _u_t_i_l_i_t_y │ │ │ │ │ + * _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 │ │ │ │ │ -dglocalcoefficients.hh File Reference │ │ │ │ │ -#include │ │ │ │ │ +monomiallocalcoefficients.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 "_._._/_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_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_._._. │ │ │ │ │ +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/a00452_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: dglocalcoefficients.hh Source File │ │ │ │ +dune-localfunctions: monomiallocalcoefficients.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -70,117 +70,77 @@ │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
dglocalcoefficients.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_DGLOCALCOEFFICIENTS_HH
│ │ │ │ -
6#define DUNE_DGLOCALCOEFFICIENTS_HH
│ │ │ │ +
5#ifndef DUNE_LOCALFUNCTIONS_MONOMIAL_MONOMIALLOCALCOEFFICIENTS_HH
│ │ │ │ +
6#define DUNE_LOCALFUNCTIONS_MONOMIAL_MONOMIALLOCALCOEFFICIENTS_HH
│ │ │ │
7
│ │ │ │ -
8#include <cassert>
│ │ │ │ +
8#include <cstddef>
│ │ │ │
9#include <vector>
│ │ │ │
10
│ │ │ │ - │ │ │ │ +
11#include "../common/localkey.hh"
│ │ │ │
12
│ │ │ │
13namespace Dune
│ │ │ │
14{
│ │ │ │
15
│ │ │ │ -
16 // DGLocalCoefficients
│ │ │ │ -
17 // -------------------
│ │ │ │ -
18
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
23 {
│ │ │ │ - │ │ │ │ -
25
│ │ │ │ +
23 template<int static_size>
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
25 {
│ │ │ │
26 public:
│ │ │ │
│ │ │ │ -
28 DGLocalCoefficients ( const unsigned int n )
│ │ │ │ -
29 : localKey_( n )
│ │ │ │ + │ │ │ │ +
29 : index(static_size, LocalKey(0,0,0))
│ │ │ │
30 {
│ │ │ │ -
31 for( unsigned i = 0; i < n; ++i )
│ │ │ │ -
32 localKey_[ i ] = LocalKey( 0, 0, i );
│ │ │ │ +
31 for(int i = 0; i < static_size; ++i)
│ │ │ │ +
32 index[i].index(i);
│ │ │ │
33 }
│ │ │ │
│ │ │ │
34
│ │ │ │ -
│ │ │ │ -
35 const LocalKey &localKey ( const unsigned int i ) const
│ │ │ │ -
36 {
│ │ │ │ -
37 assert( i < size() );
│ │ │ │ -
38 return localKey_[ i ];
│ │ │ │ +
│ │ │ │ +
36 std::size_t size () const
│ │ │ │ +
37 {
│ │ │ │ +
38 return static_size;
│ │ │ │
39 }
│ │ │ │
│ │ │ │
40
│ │ │ │ -
│ │ │ │ -
41 unsigned int size () const
│ │ │ │ -
42 {
│ │ │ │ -
43 return localKey_.size();
│ │ │ │ -
44 }
│ │ │ │ -
│ │ │ │ -
45
│ │ │ │ -
46 private:
│ │ │ │ -
47 std::vector< LocalKey > localKey_;
│ │ │ │ -
48 };
│ │ │ │ +
│ │ │ │ +
42 const LocalKey& localKey (std::size_t i) const
│ │ │ │ +
43 {
│ │ │ │ +
44 return index[i];
│ │ │ │ +
45 }
│ │ │ │ +
│ │ │ │ +
46
│ │ │ │ +
47 private:
│ │ │ │ +
48 std::vector<LocalKey> index;
│ │ │ │ +
49 };
│ │ │ │
│ │ │ │ -
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 )
│ │ │ │ -
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
│ │ │ │ - │ │ │ │ +
51}
│ │ │ │ +
52#endif //DUNE_LOCALFUNCTIONS_MONOMIAL_MONOMIALLOCALCOEFFICIENTS_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
│ │ │ │ +
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,120 +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 │ │ │ │ │ - * _u_t_i_l_i_t_y │ │ │ │ │ -dglocalcoefficients.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_DGLOCALCOEFFICIENTS_HH │ │ │ │ │ -6#define DUNE_DGLOCALCOEFFICIENTS_HH │ │ │ │ │ +5#ifndef DUNE_LOCALFUNCTIONS_MONOMIAL_MONOMIALLOCALCOEFFICIENTS_HH │ │ │ │ │ +6#define DUNE_LOCALFUNCTIONS_MONOMIAL_MONOMIALLOCALCOEFFICIENTS_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> │ │ │ │ │ +11#include "../common/localkey.hh" │ │ │ │ │ 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 │ │ │ │ │ +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 _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 ) │ │ │ │ │ +_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( unsigned i = 0; i < n; ++i ) │ │ │ │ │ -32 localKey_[ i ] = _L_o_c_a_l_K_e_y( 0, 0, i ); │ │ │ │ │ +31 for(int i = 0; i < static_size; ++i) │ │ │ │ │ +32 index[i].index(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 ]; │ │ │ │ │ +_3_6 std::size_t _s_i_z_e () const │ │ │ │ │ +37 { │ │ │ │ │ +38 return static_size; │ │ │ │ │ 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 │ │ │ │ │ +_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 // 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#endif // #ifndef DUNE_DGLOCALCOEFFICIENTS_HH │ │ │ │ │ -_l_o_c_a_l_k_e_y_._h_h │ │ │ │ │ +51} │ │ │ │ │ +52#endif //DUNE_LOCALFUNCTIONS_MONOMIAL_MONOMIALLOCALCOEFFICIENTS_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 │ │ │ │ │ -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 │ │ │ │ │ +_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 │ │ │ │ │ =============================================================================== │ │ │ │ │ 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: tensor.hh File Reference │ │ │ │ +dune-localfunctions: monomiallocalbasis.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -65,132 +65,54 @@ │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ Classes | │ │ │ │ -Namespaces | │ │ │ │ -Enumerations | │ │ │ │ -Functions
│ │ │ │ -
tensor.hh File Reference
│ │ │ │ +Namespaces
│ │ │ │ +
monomiallocalbasis.hh File Reference
│ │ │ │ │ │ │ │
│ │ │ │ -
#include <ostream>
│ │ │ │ -#include <vector>
│ │ │ │ -#include <dune/common/fvector.hh>
│ │ │ │ -#include <dune/localfunctions/utility/field.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::LFETensor< F, dimD, deriv >
class  Dune::MonomImp::EvalAccess< Traits >
 Access output vector of evaluateFunction() and evaluate() More...
 
struct  Dune::FieldTraits< LFETensor< F, dimD, deriv > >
class  Dune::MonomImp::JacobianAccess< Traits >
 Access output vector of evaluateJacobian() More...
 
struct  Dune::LFETensor< F, 0, deriv >
struct  Dune::MonomImp::Evaluate< Traits, c >
 
struct  Dune::LFETensor< F, 0, 0 >
struct  Dune::MonomImp::Evaluate< Traits, 1 >
 
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::MonomialLocalBasis< D, R, d, p >
 
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ - │ │ │ │ + │ │ │ │ │ │ │ │ -

│ │ │ │ Namespaces

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

│ │ │ │ -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,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 │ │ │ │ │ - * _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> │ │ │ │ │ + * _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 │ │ │ │ │ +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_:_:_L_F_E_T_e_n_s_o_r_<_ _F_,_ _d_i_m_D_,_ _d_e_r_i_v_ _> │ │ │ │ │ + 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_._._. │ │ │ │ │   │ │ │ │ │ -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_:_:_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_:_:_L_F_E_T_e_n_s_o_r_<_ _F_,_ _0_,_ _d_e_r_i_v_ _> │ │ │ │ │ +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_:_:_L_F_E_T_e_n_s_o_r_<_ _F_,_ _0_,_ _0_ _> │ │ │ │ │ +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_:_:_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_:_:_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_:_:_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) │ │ │ │ │ +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/a00455_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: tensor.hh Source File │ │ │ │ +dune-localfunctions: monomiallocalbasis.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -70,1417 +70,304 @@ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
tensor.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
│ │ │ │ -
6#ifndef DUNE_TENSOR_HH
│ │ │ │ -
7#define DUNE_TENSOR_HH
│ │ │ │ -
8
│ │ │ │ -
9#include <ostream>
│ │ │ │ -
10#include <vector>
│ │ │ │ +
5#ifndef DUNE_LOCALFUNCTIONS_MONOMIAL_MONOMIALLOCALBASIS_HH
│ │ │ │ +
6#define DUNE_LOCALFUNCTIONS_MONOMIAL_MONOMIALLOCALBASIS_HH
│ │ │ │ +
7
│ │ │ │ +
8#include <array>
│ │ │ │ +
9#include <cassert>
│ │ │ │ +
10#include <numeric>
│ │ │ │
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 }
│ │ │ │ -
│ │ │ │ -
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
│ │ │ │ +
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>
│ │ │ │ +
│ │ │ │ +
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 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 }
│ │ │ │ -
│ │ │ │ +
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 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
│ │ │ │ - │ │ │ │ +
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
│ │ │ │ -
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
│ │ │ │ - │ │ │ │ +
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,1635 +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 │ │ │ │ │ - * _u_t_i_l_i_t_y │ │ │ │ │ -tensor.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 │ │ │ │ │ -6#ifndef DUNE_TENSOR_HH │ │ │ │ │ -7#define DUNE_TENSOR_HH │ │ │ │ │ -8 │ │ │ │ │ -9#include │ │ │ │ │ -10#include │ │ │ │ │ +5#ifndef DUNE_LOCALFUNCTIONS_MONOMIAL_MONOMIALLOCALBASIS_HH │ │ │ │ │ +6#define DUNE_LOCALFUNCTIONS_MONOMIAL_MONOMIALLOCALBASIS_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 } │ │ │ │ │ -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 } │ │ │ │ │ -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) │ │ │ │ │ +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 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 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_:_:_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 │ │ │ │ │ +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/a00458.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: multiindex.hh File Reference │ │ │ │ +dune-localfunctions: simplexp1bubble.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -65,78 +65,42 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ Classes | │ │ │ │ -Namespaces | │ │ │ │ -Functions
│ │ │ │ -
multiindex.hh File Reference
│ │ │ │ +Namespaces
│ │ │ │ +
simplexp1bubble.hh File Reference
│ │ │ │ │ │ │ │
│ │ │ │ -
#include <vector>
│ │ │ │ -#include <ostream>
│ │ │ │ -#include <dune/common/ftraits.hh>
│ │ │ │ -#include <dune/common/fvector.hh>
│ │ │ │ -#include <dune/localfunctions/utility/field.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::MultiIndex< dim, Field >
 
struct  Dune::FieldTraits< MultiIndex< dim, Field > >
 
struct  Dune::Unity< MultiIndex< dim, F > >
 
struct  Dune::Zero< MultiIndex< dim, F > >
class  Dune::SimplexP1BubbleLocalFiniteElement< D, R, dim >
 Linear Lagrange functions enriched with an element bubble function. 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,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 │ │ │ │ │ - * _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> │ │ │ │ │ + * _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 │ │ │ │ │ +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> │ │ │ │ │ _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_ _>_ _> │ │ │ │ │ +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 │ │ │ │ │   │ │ │ │ │ -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/a00458_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: multiindex.hh Source File │ │ │ │ +dune-localfunctions: simplexp1bubble.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -70,657 +70,116 @@ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
multiindex.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_MULTIINDEX_HH
│ │ │ │ -
6#define DUNE_MULTIINDEX_HH
│ │ │ │ +
5#ifndef DUNE_LOCALFUNCTIONS_ENRICHED_SIMPLEXP1BUBBLE_HH
│ │ │ │ +
6#define DUNE_LOCALFUNCTIONS_ENRICHED_SIMPLEXP1BUBBLE_HH
│ │ │ │
7
│ │ │ │ -
8#include <vector>
│ │ │ │ -
9#include <ostream>
│ │ │ │ -
10
│ │ │ │ -
11#include <dune/common/ftraits.hh>
│ │ │ │ -
12#include <dune/common/fvector.hh>
│ │ │ │ -
13
│ │ │ │ - │ │ │ │ +
8#include <dune/geometry/type.hh>
│ │ │ │ +
9
│ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ +
14
│ │ │ │
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 {}
│ │ │ │ -
│ │ │ │ +
43 template<class D, class R, int dim>
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
45 {
│ │ │ │ +
46 public:
│ │ │ │ + │ │ │ │ +
49
│ │ │ │ + │ │ │ │ +
52
│ │ │ │ + │ │ │ │ +
55
│ │ │ │ + │ │ │ │ +
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
│ │ │ │ - │ │ │ │ +
│ │ │ │ +
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
│ │ │ │ + │ │ │ │
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
│ │ │ │ +
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,636 +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 │ │ │ │ │ - * _u_t_i_l_i_t_y │ │ │ │ │ -multiindex.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_MULTIINDEX_HH │ │ │ │ │ -6#define DUNE_MULTIINDEX_HH │ │ │ │ │ +5#ifndef DUNE_LOCALFUNCTIONS_ENRICHED_SIMPLEXP1BUBBLE_HH │ │ │ │ │ +6#define DUNE_LOCALFUNCTIONS_ENRICHED_SIMPLEXP1BUBBLE_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> │ │ │ │ │ +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{ │ │ │ │ │ -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 {} │ │ │ │ │ +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_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_) │ │ │ │ │ +_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 │ │ │ │ │ +_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 next_ = new _T_h_i_s( *(other.next_) ); │ │ │ │ │ +81 return _L_o_c_a_l_B_a_s_i_s_T_y_p_e_:_:_s_i_z_e(); │ │ │ │ │ 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 │ │ │ │ │ +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_:_:_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_:_:_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 │ │ │ │ │ +_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/a00461.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: basismatrix.hh File Reference │ │ │ │ +dune-localfunctions: enriched.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -65,50 +65,24 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
│ │ │ │ -Classes | │ │ │ │ -Namespaces
│ │ │ │ -
basismatrix.hh File Reference
│ │ │ │ +
enriched.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::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,35 +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 │ │ │ │ │ - * _u_t_i_l_i_t_y │ │ │ │ │ -_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> │ │ │ │ │ +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 │ │ │ │ │ -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/a00461_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: basismatrix.hh Source File │ │ │ │ +dune-localfunctions: enriched.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -70,277 +70,32 @@ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
basismatrix.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_BASISMATRIX_HH
│ │ │ │ -
6#define DUNE_BASISMATRIX_HH
│ │ │ │ +
5#ifndef DUNE_LOCALFUNCTIONS_ENRICHED_HH
│ │ │ │ +
6#define DUNE_LOCALFUNCTIONS_ENRICHED_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
│ │ │ │ - │ │ │ │ - │ │ │ │ -
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
│ │ │ │ + │ │ │ │ +
9
│ │ │ │ +
10#endif // DUNE_LOCALFUNCTIONS_ENRICHED_HH
│ │ │ │ + │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,326 +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 │ │ │ │ │ -basismatrix.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_BASISMATRIX_HH │ │ │ │ │ -6#define DUNE_BASISMATRIX_HH │ │ │ │ │ +5#ifndef DUNE_LOCALFUNCTIONS_ENRICHED_HH │ │ │ │ │ +6#define DUNE_LOCALFUNCTIONS_ENRICHED_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 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 │ │ │ │ │ +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 │ │ │ │ │ =============================================================================== │ │ │ │ │ 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: interpolationhelper.hh File Reference │ │ │ │ +dune-localfunctions: mimetic.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -65,38 +65,33 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ Classes | │ │ │ │ Namespaces
│ │ │ │ -
interpolationhelper.hh File Reference
│ │ │ │ +
mimetic.hh File Reference
│ │ │ │
│ │ │ │
│ │ │ │ -
#include <vector>
│ │ │ │ -#include <dune/common/fvector.hh>
│ │ │ │ -#include <dune/common/concept.hh>
│ │ │ │ -#include <dune/localfunctions/utility/field.hh>
│ │ │ │ +
#include <dune/geometry/type.hh>
│ │ │ │ +#include "common/localfiniteelementtraits.hh"
│ │ │ │ +#include "mimetic/mimeticall.hh"
│ │ │ │
│ │ │ │

Go to the source code of this file.

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

│ │ │ │ Classes

struct  Dune::InterpolationHelper< F, dimension >
 
struct  Dune::InterpolationHelper< F, dimension >::Helper< Func, Vector, true >
 
struct  Dune::InterpolationHelper< F, dimension >::Helper< Basis, Matrix, false >
class  Dune::MimeticLocalFiniteElement< D, R, dim >
 
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ Namespaces

namespace  Dune
 
│ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,28 +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 │ │ │ │ │ - * _u_t_i_l_i_t_y │ │ │ │ │ _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> │ │ │ │ │ +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 │ │ │ │ │ -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_ _> │ │ │ │ │ +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/a00464_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: interpolationhelper.hh Source File │ │ │ │ +dune-localfunctions: mimetic.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -70,199 +70,112 @@ │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
interpolationhelper.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 GENERIC_INTERPOLATIONHELPER_HH
│ │ │ │ -
6#define GENERIC_INTERPOLATIONHELPER_HH
│ │ │ │ +
5#ifndef DUNE_MIMETICLOCALFINITEELEMENT_HH
│ │ │ │ +
6#define DUNE_MIMETICLOCALFINITEELEMENT_HH
│ │ │ │
7
│ │ │ │ -
8#include <vector>
│ │ │ │ +
8#include <dune/geometry/type.hh>
│ │ │ │
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
│ │ │ │ - │ │ │ │ + │ │ │ │ +
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
│ │ │ │ + │ │ │ │ + │ │ │ │
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 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
│ │ │ │ +
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,207 +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 │ │ │ │ │ - * _u_t_i_l_i_t_y │ │ │ │ │ -interpolationhelper.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 GENERIC_INTERPOLATIONHELPER_HH │ │ │ │ │ -6#define GENERIC_INTERPOLATIONHELPER_HH │ │ │ │ │ +5#ifndef DUNE_MIMETICLOCALFINITEELEMENT_HH │ │ │ │ │ +6#define DUNE_MIMETICLOCALFINITEELEMENT_HH │ │ │ │ │ 7 │ │ │ │ │ -8#include │ │ │ │ │ +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> │ │ │ │ │ -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 │ │ │ │ │ +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 │ │ │ │ │ _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_:_:_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 │ │ │ │ │ +_D_u_n_e_:_:_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/a00467.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: basisprint.hh File Reference │ │ │ │ +dune-localfunctions: nedelec.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -65,43 +65,25 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
│ │ │ │ -Namespaces | │ │ │ │ -Functions
│ │ │ │ -
basisprint.hh File Reference
│ │ │ │ +
nedelec.hh File Reference
│ │ │ │
│ │ │ │
│ │ │ │ -
#include <dune/localfunctions/utility/multiindex.hh>
│ │ │ │ -#include <dune/localfunctions/utility/polynomialbasis.hh>
│ │ │ │ + │ │ │ │

Go to the source code of this file.

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

│ │ │ │ -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,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 │ │ │ │ │ - * _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> │ │ │ │ │ +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_. │ │ │ │ │ -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/a00467_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: basisprint.hh Source File │ │ │ │ +dune-localfunctions: nedelec.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -70,105 +70,38 @@ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
basisprint.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 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
│ │ │ │ - │ │ │ │ - │ │ │ │ -
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
│ │ │ │ +
5#ifndef DUNE_LOCALFUNCTIONS_NEDELEC_HH
│ │ │ │ +
6#define DUNE_LOCALFUNCTIONS_NEDELEC_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
│ │ │ │ + │ │ │ │ + │ │ │ │ +
14
│ │ │ │ +
15#endif // #ifndef DUNE_LOCALFUNCTIONS_NEDELEC_HH
│ │ │ │ + │ │ │ │ + │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,103 +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 │ │ │ │ │ - * _u_t_i_l_i_t_y │ │ │ │ │ -basisprint.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 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 │ │ │ │ │ -_m_u_l_t_i_i_n_d_e_x_._h_h │ │ │ │ │ -_p_o_l_y_n_o_m_i_a_l_b_a_s_i_s_._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 │ │ │ │ │ +5#ifndef DUNE_LOCALFUNCTIONS_NEDELEC_HH │ │ │ │ │ +6#define DUNE_LOCALFUNCTIONS_NEDELEC_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> │ │ │ │ │ +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 │ │ │ │ │ =============================================================================== │ │ │ │ │ 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: polynomialbasis.hh File Reference │ │ │ │ +dune-localfunctions: mimeticall.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -65,44 +65,42 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ Classes | │ │ │ │ Namespaces
│ │ │ │ -
polynomialbasis.hh File Reference
│ │ │ │ +
mimeticall.hh File Reference
│ │ │ │
│ │ │ │
│ │ │ │ -
#include <fstream>
│ │ │ │ -#include <numeric>
│ │ │ │ +
#include <cstddef>
│ │ │ │ +#include <dune/common/exceptions.hh>
│ │ │ │ +#include <dune/common/fvector.hh>
│ │ │ │ #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/geometry/type.hh>
│ │ │ │ +#include "../common/localbasis.hh"
│ │ │ │ +#include "../common/localkey.hh"
│ │ │ │
│ │ │ │

Go to the source code of this file.

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

│ │ │ │ Classes

class  Dune::PolynomialBasis< Eval, CM, D, R >
class  Dune::MimeticLocalBasis< D, R, dim >
 
struct  Dune::PolynomialBasis< Eval, CM, D, R >::Convert< dummy, DVector >
class  Dune::MimeticLocalInterpolation< LB >
 
struct  Dune::PolynomialBasis< Eval, CM, D, R >::Convert< dummy, DomainVector >
 
class  Dune::PolynomialBasisWithMatrix< Eval, CM, D, R >
class  Dune::MimeticLocalCoefficients
 ! More...
 
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ Namespaces

namespace  Dune
 
│ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,33 +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 │ │ │ │ │ + * _m_i_m_e_t_i_c │ │ │ │ │ _C_l_a_s_s_e_s | _N_a_m_e_s_p_a_c_e_s │ │ │ │ │ -polynomialbasis.hh File Reference │ │ │ │ │ -#include │ │ │ │ │ -#include │ │ │ │ │ +mimeticall.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_/_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 "_._._/_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_:_:_P_o_l_y_n_o_m_i_a_l_B_a_s_i_s_<_ _E_v_a_l_,_ _C_M_,_ _D_,_ _R_ _> │ │ │ │ │ +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_ _> │ │ │ │ │   │ │ │ │ │ -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_:_:_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_ _> │ │ │ │ │   │ │ │ │ │ -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_ _> │ │ │ │ │ +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/a00470_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: polynomialbasis.hh Source File │ │ │ │ +dune-localfunctions: mimeticall.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -70,481 +70,173 @@ │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
polynomialbasis.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_POLYNOMIALBASIS_HH
│ │ │ │ -
6#define DUNE_POLYNOMIALBASIS_HH
│ │ │ │ +
5#ifndef DUNE_MIMETIC_ALL_HH
│ │ │ │ +
6#define DUNE_MIMETIC_ALL_HH
│ │ │ │
7
│ │ │ │ -
8#include <fstream>
│ │ │ │ -
9#include <numeric>
│ │ │ │ -
10
│ │ │ │ -
11#include <dune/common/fmatrix.hh>
│ │ │ │ -
12
│ │ │ │ - │ │ │ │ -
14
│ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ -
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:
│ │ │ │ - │ │ │ │ +
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 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 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
│ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ +
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
│ │ │ │
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
│ │ │ │ - │ │ │ │ +
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,538 +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 │ │ │ │ │ - * _u_t_i_l_i_t_y │ │ │ │ │ -polynomialbasis.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_POLYNOMIALBASIS_HH │ │ │ │ │ -6#define DUNE_POLYNOMIALBASIS_HH │ │ │ │ │ +5#ifndef DUNE_MIMETIC_ALL_HH │ │ │ │ │ +6#define DUNE_MIMETIC_ALL_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> │ │ │ │ │ -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; │ │ │ │ │ +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 │ │ │ │ │ -_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 │ │ │ │ │ -_c_o_e_f_f_m_a_t_r_i_x_._h_h │ │ │ │ │ -_m_o_n_o_m_i_a_l_b_a_s_i_s_._h_h │ │ │ │ │ -_b_a_s_i_s_e_v_a_l_u_a_t_o_r_._h_h │ │ │ │ │ -_m_u_l_t_i_i_n_d_e_x_._h_h │ │ │ │ │ +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 │ │ │ │ │ _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< │ │ │ │ │ +_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 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 │ │ │ │ │ +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 │ │ │ │ │ -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 │ │ │ │ │ +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 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 │ │ │ │ │ +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 │ │ │ │ │ +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 │ │ │ │ │ =============================================================================== │ │ │ │ │ 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: l2interpolation.hh File Reference │ │ │ │ +dune-localfunctions: lagrangebasis.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -65,41 +65,35 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ Classes | │ │ │ │ Namespaces
│ │ │ │ -
l2interpolation.hh File Reference
│ │ │ │ +
lagrangebasis.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 <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::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...
struct  Dune::LagrangeBasisFactory< LP, dim, SF, CF >
 
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ 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 │ │ │ │ │ - * _u_t_i_l_i_t_y │ │ │ │ │ + * _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 │ │ │ │ │ -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> │ │ │ │ │ +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_:_:_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_._._. │ │ │ │ │ +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/a00473_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: l2interpolation.hh Source File │ │ │ │ +dune-localfunctions: lagrangebasis.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -70,242 +70,58 @@ │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
l2interpolation.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_L2INTERPOLATION_HH
│ │ │ │ -
6#define DUNE_L2INTERPOLATION_HH
│ │ │ │ +
5#ifndef DUNE_LAGRANGEBASIS_HH
│ │ │ │ +
6#define DUNE_LAGRANGEBASIS_HH
│ │ │ │
7
│ │ │ │ -
8#include <dune/common/concept.hh>
│ │ │ │ -
9#include <dune/common/dynmatrix.hh>
│ │ │ │ +
8#include <fstream>
│ │ │ │ +
9#include <dune/common/exceptions.hh>
│ │ │ │
10
│ │ │ │ -
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 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
│ │ │ │ - │ │ │ │ + │ │ │ │ + │ │ │ │ +
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 {};
│ │ │ │ +
│ │ │ │ +
26
│ │ │ │ +
27}
│ │ │ │ +
28
│ │ │ │ +
29#endif // #ifndef DUNE_LAGRANGEBASIS_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
│ │ │ │ +
Definition lagrangebasis.hh:25
│ │ │ │ +
Definition defaultbasisfactory.hh:38
│ │ │ │ + │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,272 +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 │ │ │ │ │ - * _u_t_i_l_i_t_y │ │ │ │ │ -l2interpolation.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_L2INTERPOLATION_HH │ │ │ │ │ -6#define DUNE_L2INTERPOLATION_HH │ │ │ │ │ +5#ifndef DUNE_LAGRANGEBASIS_HH │ │ │ │ │ +6#define DUNE_LAGRANGEBASIS_HH │ │ │ │ │ 7 │ │ │ │ │ -8#include │ │ │ │ │ -9#include │ │ │ │ │ +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_/_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 │ │ │ │ │ -_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 │ │ │ │ │ +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 {}; │ │ │ │ │ +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_:_:_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_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/a00476.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: defaultbasisfactory.hh File Reference │ │ │ │ +dune-localfunctions: lagrangeprism.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -65,37 +65,40 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ Classes | │ │ │ │ Namespaces
│ │ │ │ -
defaultbasisfactory.hh File Reference
│ │ │ │ +
lagrangeprism.hh File Reference
│ │ │ │
│ │ │ │
│ │ │ │ -
#include <fstream>
│ │ │ │ -#include <dune/common/exceptions.hh>
│ │ │ │ -#include <dune/localfunctions/utility/basismatrix.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::Identity
 
struct  Dune::DefaultBasisFactory< PreBFactory, InterpolFactory, dim, dimR, SF, CF, PreBasisKeyExtractor >
 
struct  Dune::DefaultBasisFactory< PreBFactory, InterpolFactory, dim, dimR, SF, CF, PreBasisKeyExtractor >::EvaluationBasisFactory< dd, FF >
class  Dune::LagrangePrismLocalFiniteElement< D, R, k >
 Lagrange finite element for 3d prisms with arbitrary compile-time polynomial order. More...
 
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ Namespaces

namespace  Dune
 
│ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,27 +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 │ │ │ │ │ + * _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 │ │ │ │ │ -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> │ │ │ │ │ +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 │ │ │ │ │ -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_ _> │ │ │ │ │ +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/a00476_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: defaultbasisfactory.hh Source File │ │ │ │ +dune-localfunctions: lagrangeprism.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -70,151 +70,688 @@ │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
defaultbasisfactory.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_DEFAULTBASISFACTORY_HH
│ │ │ │ -
6#define DUNE_DEFAULTBASISFACTORY_HH
│ │ │ │ +
5#ifndef DUNE_LOCALFUNCTIONS_LAGRANGE_LAGRANGEPRISM_HH
│ │ │ │ +
6#define DUNE_LOCALFUNCTIONS_LAGRANGE_LAGRANGEPRISM_HH
│ │ │ │
7
│ │ │ │ -
8#include <fstream>
│ │ │ │ -
9#include <dune/common/exceptions.hh>
│ │ │ │ +
8#include <array>
│ │ │ │ +
9#include <numeric>
│ │ │ │
10
│ │ │ │ - │ │ │ │ -
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;
│ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ +
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);
│ │ │ │ +
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 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 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() );
│ │ │ │ +
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 Basis *basis = new Basis( *monomialBasis );
│ │ │ │ -
72
│ │ │ │ -
73 basis->fill( matrix );
│ │ │ │ -
74
│ │ │ │ -
75 InterpolationFactory::release(interpol);
│ │ │ │ -
76 PreBasisFactory::release(preBasis);
│ │ │ │ +
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 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
│ │ │ │ - │ │ │ │ +
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
│ │ │ │ -
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
│ │ │ │ +
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
│ │ │ │ + │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,188 +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 │ │ │ │ │ - * _u_t_i_l_i_t_y │ │ │ │ │ -defaultbasisfactory.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_DEFAULTBASISFACTORY_HH │ │ │ │ │ -6#define DUNE_DEFAULTBASISFACTORY_HH │ │ │ │ │ +5#ifndef DUNE_LOCALFUNCTIONS_LAGRANGE_LAGRANGEPRISM_HH │ │ │ │ │ +6#define DUNE_LOCALFUNCTIONS_LAGRANGE_LAGRANGEPRISM_HH │ │ │ │ │ 7 │ │ │ │ │ -8#include │ │ │ │ │ -9#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_/_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; │ │ │ │ │ +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 () │ │ │ │ │ +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 │ │ │ │ │ -_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 }; │ │ │ │ │ -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() ); │ │ │ │ │ +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 _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); │ │ │ │ │ +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 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 │ │ │ │ │ +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_k_e_y_._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_:_:_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_:_:_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 │ │ │ │ │ =============================================================================== │ │ │ │ │ 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: enriched.hh File Reference │ │ │ │ +dune-localfunctions: q2.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -65,24 +65,44 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
enriched.hh File Reference
│ │ │ │ +
│ │ │ │ +Classes | │ │ │ │ +Namespaces
│ │ │ │ +
q2.hh File Reference
│ │ │ │
│ │ │ │
│ │ │ │ -
#include <dune/localfunctions/enriched/simplexp1bubble.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::Q2FiniteElementFactory< Geometry, RF >
 Factory for global-valued Q23D elements. More...
 
│ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ +

│ │ │ │ +Namespaces

namespace  Dune
 
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,11 +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 │ │ │ │ │ -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> │ │ │ │ │ + * _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> │ │ │ │ │ _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_._._. │ │ │ │ │ +  │ │ │ │ │ +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/a00479_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: enriched.hh Source File │ │ │ │ +dune-localfunctions: q2.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -70,32 +70,77 @@ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
enriched.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_ENRICHED_HH
│ │ │ │ -
6#define DUNE_LOCALFUNCTIONS_ENRICHED_HH
│ │ │ │ +
5#ifndef DUNE_Q2_LOCALFINITEELEMENT_HH
│ │ │ │ +
6#define DUNE_Q2_LOCALFINITEELEMENT_HH
│ │ │ │
7
│ │ │ │ - │ │ │ │ -
9
│ │ │ │ -
10#endif // DUNE_LOCALFUNCTIONS_ENRICHED_HH
│ │ │ │ - │ │ │ │ +
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
│ │ │ │ +
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,22 +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 │ │ │ │ │ -enriched.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_ENRICHED_HH │ │ │ │ │ -6#define DUNE_LOCALFUNCTIONS_ENRICHED_HH │ │ │ │ │ +5#ifndef DUNE_Q2_LOCALFINITEELEMENT_HH │ │ │ │ │ +6#define DUNE_Q2_LOCALFINITEELEMENT_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 │ │ │ │ │ +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_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_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_c_u_b_e_._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_:_:_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/a00482.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: lagrange.hh File Reference │ │ │ │ +dune-localfunctions: equidistantpoints.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -65,54 +65,53 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ Classes | │ │ │ │ -Namespaces
│ │ │ │ -
lagrange.hh File Reference
│ │ │ │ +Namespaces | │ │ │ │ +Functions
│ │ │ │ +
equidistantpoints.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 <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::LagrangeLocalFiniteElement< LP, dimDomain, D, R, SF, CF >
 Lagrange local finite elements for a given set of interpolation points. 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

│ │ │ │ -

Convenience header that includes all implementations of Lagrange finite elements.

│ │ │ │ -
│ │ │ │ +
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,35 +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 │ │ │ │ │ -_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> │ │ │ │ │ -#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> │ │ │ │ │ + * _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_:_:_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_:_:_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 ********** │ │ │ │ │ -Convenience header that includes all implementations of Lagrange finite │ │ │ │ │ -elements. │ │ │ │ │ +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/a00482_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: lagrange.hh Source File │ │ │ │ +dune-localfunctions: equidistantpoints.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -70,90 +70,259 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
lagrange.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_LOCALFUNCTIONS_LAGRANGE_HH
│ │ │ │ -
6#define DUNE_LOCALFUNCTIONS_LAGRANGE_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// Headers for Lagrange elements with run-time order
│ │ │ │ - │ │ │ │ - │ │ │ │ -
15
│ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ +
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// 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
│ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ +
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
│ │ │ │ +
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);
│ │ │ │ +
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
│ │ │ │ +
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
│ │ │ │ +
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
│ │ │ │ -
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
│ │ │ │ - │ │ │ │ - │ │ │ │ +
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,92 +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 │ │ │ │ │ -lagrange.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_LOCALFUNCTIONS_LAGRANGE_HH │ │ │ │ │ -6#define DUNE_LOCALFUNCTIONS_LAGRANGE_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// 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> │ │ │ │ │ +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// 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 > > │ │ │ │ │ +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 │ │ │ │ │ +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); │ │ │ │ │ +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 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 │ │ │ │ │ -_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_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_b_a_s_i_s_._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_p_r_i_s_m_._h_h │ │ │ │ │ -_p_q_2_2_d_._h_h │ │ │ │ │ -_d_g_l_o_c_a_l_c_o_e_f_f_i_c_i_e_n_t_s_._h_h │ │ │ │ │ +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 │ │ │ │ │ +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 │ │ │ │ │ +_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_:_:_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_:_:_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/a00485.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: raviartthomas.hh File Reference │ │ │ │ +dune-localfunctions: pk2d.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -65,36 +65,48 @@ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
raviartthomas.hh File Reference
│ │ │ │ +
│ │ │ │ +Classes | │ │ │ │ +Namespaces
│ │ │ │ +
pk2d.hh File Reference
│ │ │ │
│ │ │ │
│ │ │ │ -
#include <dune/localfunctions/raviartthomas/raviartthomascube.hh>
│ │ │ │ -#include <dune/localfunctions/raviartthomas/raviartthomassimplex.hh>
│ │ │ │ -#include <dune/localfunctions/raviartthomas/raviartthomas02d.hh>
│ │ │ │ -#include <dune/localfunctions/raviartthomas/raviartthomas12d.hh>
│ │ │ │ -#include <dune/localfunctions/raviartthomas/raviartthomas03d.hh>
│ │ │ │ -#include <dune/localfunctions/raviartthomas/raviartthomas0cube2d.hh>
│ │ │ │ -#include <dune/localfunctions/raviartthomas/raviartthomas1cube2d.hh>
│ │ │ │ -#include <dune/localfunctions/raviartthomas/raviartthomas2cube2d.hh>
│ │ │ │ -#include <dune/localfunctions/raviartthomas/raviartthomas3cube2d.hh>
│ │ │ │ -#include <dune/localfunctions/raviartthomas/raviartthomas0cube3d.hh>
│ │ │ │ -#include <dune/localfunctions/raviartthomas/raviartthomas1cube3d.hh>
│ │ │ │ -#include <dune/localfunctions/raviartthomas/raviartthomas0pyramid.hh>
│ │ │ │ -#include <dune/localfunctions/raviartthomas/raviartthomas0prism.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::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,23 +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 │ │ │ │ │ -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> │ │ │ │ │ + * _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> │ │ │ │ │ _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/a00485_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: raviartthomas.hh Source File │ │ │ │ +dune-localfunctions: pk2d.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -70,59 +70,144 @@ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
raviartthomas.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_RAVIARTTHOMASFINITEELEMENT_HH
│ │ │ │ -
6#define DUNE_RAVIARTTHOMASFINITEELEMENT_HH
│ │ │ │ +
5#ifndef DUNE_PK2DLOCALFINITEELEMENT_HH
│ │ │ │ +
6#define DUNE_PK2DLOCALFINITEELEMENT_HH
│ │ │ │
7
│ │ │ │ -
8// Raviart-Thomas implementations with run-time order
│ │ │ │ - │ │ │ │ - │ │ │ │ +
8#include <cstddef>
│ │ │ │ +
9
│ │ │ │ +
10#include <dune/geometry/type.hh>
│ │ │ │
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.
│ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ +
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
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,53 +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 │ │ │ │ │ -raviartthomas.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_RAVIARTTHOMASFINITEELEMENT_HH │ │ │ │ │ -6#define DUNE_RAVIARTTHOMASFINITEELEMENT_HH │ │ │ │ │ +5#ifndef DUNE_PK2DLOCALFINITEELEMENT_HH │ │ │ │ │ +6#define DUNE_PK2DLOCALFINITEELEMENT_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> │ │ │ │ │ +8#include │ │ │ │ │ +9 │ │ │ │ │ +10#include │ │ │ │ │ 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_3_c_u_b_e_2_d_._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_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_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_0_p_y_r_a_m_i_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_1_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 │ │ │ │ │ -_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 │ │ │ │ │ -_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. │ │ │ │ │ +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_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_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 │ │ │ │ │ +_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 │ │ │ │ │ =============================================================================== │ │ │ │ │ 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: monomial.hh File Reference │ │ │ │ +dune-localfunctions: lagrangecube.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -65,45 +65,40 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ Classes | │ │ │ │ Namespaces
│ │ │ │ -
monomial.hh File Reference
│ │ │ │ +
lagrangecube.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 <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::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::LagrangeCubeLocalFiniteElement< D, R, dim, k >
 Lagrange finite element for cubes with arbitrary compile-time dimension and polynomial order. More...
 
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ Namespaces

namespace  Dune
 
│ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,32 +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 │ │ │ │ │ -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" │ │ │ │ │ +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_:_:_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_:_:_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/a00488_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: monomial.hh Source File │ │ │ │ +dune-localfunctions: lagrangecube.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -70,223 +70,741 @@ │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
monomial.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
│ │ │ │ -
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_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/type.hh>
│ │ │ │ +
15#include <dune/geometry/referenceelements.hh>
│ │ │ │
16
│ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ -
22
│ │ │ │ -
23namespace Dune
│ │ │ │ -
24{
│ │ │ │ -
25
│ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ +
20
│ │ │ │ +
21namespace Dune { namespace Impl
│ │ │ │ +
22{
│ │ │ │ +
23 // Forward declaration
│ │ │ │ +
24 template<class LocalBasis>
│ │ │ │ +
25 class LagrangeCubeLocalInterpolation;
│ │ │ │
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 }
│ │ │ │ -
│ │ │ │ -
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
│ │ │ │ +
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
│ │ │ │ -
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
│ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ +
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
│ │ │ │ +
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
│ │ │ │ -
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
│ │ │ │ +
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,246 +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 │ │ │ │ │ -monomial.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 │ │ │ │ │ -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_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 │ │ │ │ │ +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 │ │ │ │ │ +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 │ │ │ │ │ -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 │ │ │ │ │ +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; │ │ │ │ │ +99 } │ │ │ │ │ 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); │ │ │ │ │ +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_k_e_y_._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_:_:_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_:_:_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 │ │ │ │ │ +_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 │ │ │ │ │ -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 │ │ │ │ │ +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 │ │ │ │ │ -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 │ │ │ │ │ +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/a00491.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: dualmortarbasis.hh File Reference │ │ │ │ +dune-localfunctions: p0localcoefficients.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -65,25 +65,41 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
dualmortarbasis.hh File Reference
│ │ │ │ +
│ │ │ │ +Classes | │ │ │ │ +Namespaces
│ │ │ │ +
p0localcoefficients.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::P0LocalCoefficients
 
│ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ +

│ │ │ │ +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> │ │ │ │ │ + * _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 │ │ │ │ │ +#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_:_:_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/a00491_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: dualmortarbasis.hh Source File │ │ │ │ +dune-localfunctions: p0localcoefficients.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -70,34 +70,74 @@ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
dualmortarbasis.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_LOCALFUNCTIONS_DUALMORTARBASIS_HH
│ │ │ │ -
6#define DUNE_LOCALFUNCTIONS_DUALMORTARBASIS_HH
│ │ │ │ +
5#ifndef DUNE_P0LOCALCOEFFICIENTS_HH
│ │ │ │ +
6#define DUNE_P0LOCALCOEFFICIENTS_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:
│ │ │ │ +
│ │ │ │ +
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
│ │ │ │ +
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,24 +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 │ │ │ │ │ -dualmortarbasis.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_LOCALFUNCTIONS_DUALMORTARBASIS_HH │ │ │ │ │ -6#define DUNE_LOCALFUNCTIONS_DUALMORTARBASIS_HH │ │ │ │ │ +5#ifndef DUNE_P0LOCALCOEFFICIENTS_HH │ │ │ │ │ +6#define DUNE_P0LOCALCOEFFICIENTS_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 _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; │ │ │ │ │ +41 } │ │ │ │ │ +42 │ │ │ │ │ +43 private: │ │ │ │ │ +44 _L_o_c_a_l_K_e_y index; │ │ │ │ │ +45 }; │ │ │ │ │ +46 │ │ │ │ │ +47} │ │ │ │ │ +48#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_:_:_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/a00494.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: localfiniteelementvariant.hh File Reference │ │ │ │ +dune-localfunctions: p0localbasis.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -65,41 +65,33 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ Classes | │ │ │ │ Namespaces
│ │ │ │ -
localfiniteelementvariant.hh File Reference
│ │ │ │ +
p0localbasis.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>
│ │ │ │ +
#include <numeric>
│ │ │ │ +#include <dune/common/fmatrix.hh>
│ │ │ │ +#include <dune/localfunctions/common/localbasis.hh>
│ │ │ │
│ │ │ │

Go to the source code of this file.

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

│ │ │ │ Classes

class  Dune::LocalFiniteElementVariant< Implementations >
 Type erasure class for wrapping LocalFiniteElement classes. More...
class  Dune::P0LocalBasis< D, R, d >
 
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ Namespaces

namespace  Dune
 
│ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,29 +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 │ │ │ │ │ - * _c_o_m_m_o_n │ │ │ │ │ + * _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 │ │ │ │ │ -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> │ │ │ │ │ +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> │ │ │ │ │ -#include <_d_u_n_e_/_l_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_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_._._. │ │ │ │ │ +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/a00494_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: localfiniteelementvariant.hh Source File │ │ │ │ +dune-localfunctions: p0localbasis.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -70,387 +70,109 @@ │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
localfiniteelementvariant.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_LOCALFUNCTIONS_COMMON_LOCALFINITEELEMENTVARIANT_HH
│ │ │ │ -
6#define DUNE_LOCALFUNCTIONS_COMMON_LOCALFINITEELEMENTVARIANT_HH
│ │ │ │ +
5#ifndef DUNE_P0LOCALBASIS_HH
│ │ │ │ +
6#define DUNE_P0LOCALBASIS_HH
│ │ │ │
7
│ │ │ │ -
8#include <cstddef>
│ │ │ │ -
9#include <type_traits>
│ │ │ │ -
10#include <variant>
│ │ │ │ +
8#include <numeric>
│ │ │ │ +
9
│ │ │ │ +
10#include <dune/common/fmatrix.hh>
│ │ │ │
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 {
│ │ │ │ + │ │ │ │ +
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
│ │ │ │ -
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:
│ │ │ │ +
│ │ │ │ +
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
│ │ │ │ -
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
│ │ │ │ - │ │ │ │ - │ │ │ │ +
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 }
│ │ │ │ +
│ │ │ │ +
78
│ │ │ │ +
│ │ │ │ +
80 unsigned int order () const
│ │ │ │ +
81 {
│ │ │ │ +
82 return 0;
│ │ │ │ +
83 }
│ │ │ │ +
│ │ │ │ +
84 };
│ │ │ │ +
│ │ │ │ +
85
│ │ │ │ +
86}
│ │ │ │ +
87
│ │ │ │ +
88#endif
│ │ │ │
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
│ │ │ │ - │ │ │ │ +
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,423 +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 │ │ │ │ │ - * _c_o_m_m_o_n │ │ │ │ │ -localfiniteelementvariant.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_LOCALFUNCTIONS_COMMON_LOCALFINITEELEMENTVARIANT_HH │ │ │ │ │ -6#define DUNE_LOCALFUNCTIONS_COMMON_LOCALFINITEELEMENTVARIANT_HH │ │ │ │ │ +5#ifndef DUNE_P0LOCALBASIS_HH │ │ │ │ │ +6#define DUNE_P0LOCALBASIS_HH │ │ │ │ │ 7 │ │ │ │ │ -8#include │ │ │ │ │ -9#include │ │ │ │ │ -10#include │ │ │ │ │ +8#include │ │ │ │ │ +9 │ │ │ │ │ +10#include │ │ │ │ │ 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 { │ │ │ │ │ +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 │ │ │ │ │ -43 template │ │ │ │ │ -44 struct FirstType │ │ │ │ │ -45 { using type = I0; }; │ │ │ │ │ -46 │ │ │ │ │ -47 using FirstImpTraits = typename FirstType::type::Traits; │ │ │ │ │ -48 │ │ │ │ │ -49 public: │ │ │ │ │ +_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 │ │ │ │ │ -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_k_e_y_._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 │ │ │ │ │ +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 │ │ │ │ │ +_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_:_:_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 │ │ │ │ │ +_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 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 │ │ │ │ │ +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/a00497.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: localfiniteelementvariantcache.hh File Reference │ │ │ │ +dune-localfunctions: p0localinterpolation.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -65,42 +65,32 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ Classes | │ │ │ │ Namespaces
│ │ │ │ -
localfiniteelementvariantcache.hh File Reference
│ │ │ │ +
p0localinterpolation.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 <dune/geometry/referenceelements.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::P0LocalInterpolation< LB >
 
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ Namespaces

namespace  Dune
 
│ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,31 +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 │ │ │ │ │ - * _c_o_m_m_o_n │ │ │ │ │ + * _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 │ │ │ │ │ -localfiniteelementvariantcache.hh File Reference │ │ │ │ │ +p0localinterpolation.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> │ │ │ │ │ +#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_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_:_:_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/a00497_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: localfiniteelementvariantcache.hh Source File │ │ │ │ +dune-localfunctions: p0localinterpolation.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -70,143 +70,72 @@ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
localfiniteelementvariantcache.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_COMMON_LOCALFINITEELEMENTVARIANTCACHE_HH
│ │ │ │ -
6#define DUNE_LOCALFUNCTIONS_COMMON_LOCALFINITEELEMENTVARIANTCACHE_HH
│ │ │ │ +
5#ifndef DUNE_P0LOCALINTERPOLATION_HH
│ │ │ │ +
6#define DUNE_P0LOCALINTERPOLATION_HH
│ │ │ │
7
│ │ │ │
8#include <vector>
│ │ │ │ -
9#include <tuple>
│ │ │ │ -
10#include <utility>
│ │ │ │ -
11#include <type_traits>
│ │ │ │ -
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 {
│ │ │ │ -
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
│ │ │ │ - │ │ │ │ +
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
│ │ │ │
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
│ │ │ │ +
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,158 +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 │ │ │ │ │ - * _c_o_m_m_o_n │ │ │ │ │ -localfiniteelementvariantcache.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_COMMON_LOCALFINITEELEMENTVARIANTCACHE_HH │ │ │ │ │ -6#define DUNE_LOCALFUNCTIONS_COMMON_LOCALFINITEELEMENTVARIANTCACHE_HH │ │ │ │ │ +5#ifndef DUNE_P0LOCALINTERPOLATION_HH │ │ │ │ │ +6#define DUNE_P0LOCALINTERPOLATION_HH │ │ │ │ │ 7 │ │ │ │ │ 8#include │ │ │ │ │ -9#include │ │ │ │ │ -10#include │ │ │ │ │ -11#include │ │ │ │ │ -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 { │ │ │ │ │ -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 │ │ │ │ │ +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 │ │ │ │ │ _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_:_:_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/a00500.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: interface.hh File Reference │ │ │ │ +dune-localfunctions: cache.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -65,54 +65,49 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ Classes | │ │ │ │ Namespaces
│ │ │ │ -
interface.hh File Reference
│ │ │ │ +
cache.hh File Reference
│ │ │ │
│ │ │ │
│ │ │ │ -
#include <array>
│ │ │ │ -#include <cstddef>
│ │ │ │ -#include <vector>
│ │ │ │ +
#include <map>
│ │ │ │ +#include <optional>
│ │ │ │ +#include <type_traits>
│ │ │ │ #include <dune/geometry/type.hh>
│ │ │ │ -#include <dune/localfunctions/common/localkey.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::FiniteElementInterface
 Interface for global-valued finite elements. More...
class  Dune::DynamicLagrangeLocalFiniteElementCache< Domain, Range, dim >
 A cache that stores Lagrange finite elements for the given dimension and order. More...
 
struct  Dune::FiniteElementInterface::Traits
 types of component objects 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::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::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
 
│ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,42 +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 │ │ │ │ │ - * _c_o_m_m_o_n │ │ │ │ │ + * _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 │ │ │ │ │ -interface.hh File Reference │ │ │ │ │ -#include │ │ │ │ │ -#include │ │ │ │ │ -#include │ │ │ │ │ +cache.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> │ │ │ │ │ +#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_:_:_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_:_:_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 │ │ │ │ │   │ │ │ │ │ =============================================================================== │ │ │ │ │ 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: interface.hh Source File │ │ │ │ +dune-localfunctions: cache.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -70,215 +70,146 @@ │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
interface.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
│ │ │ │ -
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
│ │ │ │ -
17
│ │ │ │ -
18#include <dune/geometry/type.hh>
│ │ │ │ -
19
│ │ │ │ - │ │ │ │ -
21
│ │ │ │ -
22namespace Dune {
│ │ │ │ +
5#ifndef DUNE_LOCALFUNCTIONS_LAGRANGE_CACHE_HH
│ │ │ │ +
6#define DUNE_LOCALFUNCTIONS_LAGRANGE_CACHE_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>
│ │ │ │ +
14
│ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ +
22
│ │ │ │
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 };
│ │ │ │ +
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 }
│ │ │ │
│ │ │ │ -
58
│ │ │ │
60
│ │ │ │ - │ │ │ │ - │ │ │ │ -
70
│ │ │ │ -
72
│ │ │ │ -
76 const Traits::Basis& basis() const;
│ │ │ │ -
78
│ │ │ │ - │ │ │ │ -
84
│ │ │ │ - │ │ │ │ -
90 GeometryType type() const;
│ │ │ │ -
91 };
│ │ │ │ -
│ │ │ │ -
92
│ │ │ │ +
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
│ │ │ │ -
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
│ │ │ │ - │ │ │ │ +
│ │ │ │ +
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
│ │ │ │ -
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
│ │ │ │ +
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,290 +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 │ │ │ │ │ - * _c_o_m_m_o_n │ │ │ │ │ -interface.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 │ │ │ │ │ -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 │ │ │ │ │ -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 { │ │ │ │ │ +5#ifndef DUNE_LOCALFUNCTIONS_LAGRANGE_CACHE_HH │ │ │ │ │ +6#define DUNE_LOCALFUNCTIONS_LAGRANGE_CACHE_HH │ │ │ │ │ +7 │ │ │ │ │ +8#include │ │ │ │ │ +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_/_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 │ │ │ │ │ -_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 │ │ │ │ │ +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 │ │ │ │ │ -_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 │ │ │ │ │ -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 │ │ │ │ │ +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 │ │ │ │ │ -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 │ │ │ │ │ +_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 │ │ │ │ │ +_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_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_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_:_:_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_:_:_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/a00503.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: virtualinterface.hh File Reference │ │ │ │ +dune-localfunctions: lagrangelfecache.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -65,57 +65,48 @@ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ -Classes | │ │ │ │ -Namespaces
│ │ │ │ -
virtualinterface.hh File Reference
│ │ │ │ +Namespaces | │ │ │ │ +Typedefs
│ │ │ │ +
lagrangelfecache.hh File Reference
│ │ │ │ │ │ │ │
│ │ │ │ -
#include <type_traits>
│ │ │ │ -#include <array>
│ │ │ │ -#include <vector>
│ │ │ │ -#include <functional>
│ │ │ │ +
#include <tuple>
│ │ │ │ +#include <utility>
│ │ │ │ #include <dune/geometry/type.hh>
│ │ │ │ -#include <dune/localfunctions/common/localbasis.hh>
│ │ │ │ -#include <dune/localfunctions/common/localkey.hh>
│ │ │ │ -#include <dune/localfunctions/common/localfiniteelementtraits.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::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...
 
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ +

│ │ │ │ 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,39 +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 │ │ │ │ │ - * _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 │ │ │ │ │ + * _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 <_d_u_n_e_/_l_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 │ │ │ │ │ +#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_:_:_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_._._. │ │ │ │ │ -  │ │ │ │ │ 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/a00503_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: virtualinterface.hh Source File │ │ │ │ +dune-localfunctions: lagrangelfecache.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -70,244 +70,145 @@ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
virtualinterface.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_LOCALFUNCTIONS_COMMON_VIRTUALINTERFACE_HH
│ │ │ │ -
6#define DUNE_LOCALFUNCTIONS_COMMON_VIRTUALINTERFACE_HH
│ │ │ │ +
5#ifndef DUNE_LOCALFUNCTIONS_LAGRANGE_LAGRANGELFECACHE_HH
│ │ │ │ +
6#define DUNE_LOCALFUNCTIONS_LAGRANGE_LAGRANGELFECACHE_HH
│ │ │ │
7
│ │ │ │ -
8#include <type_traits>
│ │ │ │ -
9#include <array>
│ │ │ │ -
10#include <vector>
│ │ │ │ -
11#include <functional>
│ │ │ │ -
12
│ │ │ │ -
13#include <dune/geometry/type.hh>
│ │ │ │ -
14
│ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ -
18
│ │ │ │ -
19namespace Dune
│ │ │ │ -
20{
│ │ │ │ +
8#include <tuple>
│ │ │ │ +
9#include <utility>
│ │ │ │ +
10
│ │ │ │ +
11#include <dune/geometry/type.hh>
│ │ │ │ +
12#include <dune/geometry/typeindex.hh>
│ │ │ │ +
13
│ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ +
20
│ │ │ │
21
│ │ │ │ -
22 // forward declaration needed by the helper traits
│ │ │ │ -
23 template<class DomainType, class RangeType>
│ │ │ │ -
24 class LocalInterpolationVirtualInterface;
│ │ │ │ +
22namespace Dune {
│ │ │ │ +
23
│ │ │ │ +
24
│ │ │ │
25
│ │ │ │ -
26
│ │ │ │ +
26namespace Impl {
│ │ │ │
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;
│ │ │ │ +
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
│ │ │ │ -
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:
│ │ │ │ +
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 };
│ │ │ │ +
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
│ │ │ │ -
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
│ │ │ │ - │ │ │ │ - │ │ │ │ +
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
│ │ │ │ -
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
│ │ │ │ - │ │ │ │ +
A cache storing a compile time selection of local finite element implementations.
Definition localfiniteelementvariantcache.hh:68
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,322 +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 │ │ │ │ │ - * _c_o_m_m_o_n │ │ │ │ │ -virtualinterface.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_LOCALFUNCTIONS_COMMON_VIRTUALINTERFACE_HH │ │ │ │ │ -6#define DUNE_LOCALFUNCTIONS_COMMON_VIRTUALINTERFACE_HH │ │ │ │ │ +5#ifndef DUNE_LOCALFUNCTIONS_LAGRANGE_LAGRANGELFECACHE_HH │ │ │ │ │ +6#define DUNE_LOCALFUNCTIONS_LAGRANGE_LAGRANGELFECACHE_HH │ │ │ │ │ 7 │ │ │ │ │ -8#include │ │ │ │ │ -9#include │ │ │ │ │ -10#include │ │ │ │ │ -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{ │ │ │ │ │ +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 │ │ │ │ │ -22 // forward declaration needed by the helper traits │ │ │ │ │ -23 template │ │ │ │ │ -24 class LocalInterpolationVirtualInterface; │ │ │ │ │ +22namespace _D_u_n_e { │ │ │ │ │ +23 │ │ │ │ │ +24 │ │ │ │ │ 25 │ │ │ │ │ -26 │ │ │ │ │ +26namespace Impl { │ │ │ │ │ 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; │ │ │ │ │ +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 │ │ │ │ │ -_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: │ │ │ │ │ +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 }; │ │ │ │ │ +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 │ │ │ │ │ -_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_k_e_y_._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 │ │ │ │ │ +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_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_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 │ │ │ │ │ +_p_0_._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_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 │ │ │ │ │ +_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/a00506.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: localkey.hh File Reference │ │ │ │ +dune-localfunctions: pk1d.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -65,34 +65,41 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ Classes | │ │ │ │ Namespaces
│ │ │ │ -
localkey.hh File Reference
│ │ │ │ +
pk1d.hh File Reference
│ │ │ │
│ │ │ │
│ │ │ │ -
#include <array>
│ │ │ │ -#include <cstddef>
│ │ │ │ -#include <ostream>
│ │ │ │ +
#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::LocalKey
 Describe position of one degree of freedom. 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
 
│ │ │ │ ├── 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 │ │ │ │ │ - * _c_o_m_m_o_n │ │ │ │ │ + * _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 │ │ │ │ │ -localkey.hh File Reference │ │ │ │ │ -#include │ │ │ │ │ +pk1d.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_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_:_:_L_o_c_a_l_K_e_y │ │ │ │ │ -  Describe position of one degree of freedom. _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 │ │ │ │ │   │ │ │ │ │ =============================================================================== │ │ │ │ │ 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: localkey.hh Source File │ │ │ │ +dune-localfunctions: pk1d.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -70,124 +70,144 @@ │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
localkey.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_LOCALKEY_HH
│ │ │ │ -
6#define DUNE_LOCALKEY_HH
│ │ │ │ +
5#ifndef DUNE_PK1DLOCALFINITEELEMENT_HH
│ │ │ │ +
6#define DUNE_PK1DLOCALFINITEELEMENT_HH
│ │ │ │
7
│ │ │ │ -
8#include <array>
│ │ │ │ -
9#include <cstddef>
│ │ │ │ -
10#include <ostream>
│ │ │ │ +
8#include <cstddef>
│ │ │ │ +
9
│ │ │ │ +
10#include <dune/geometry/type.hh>
│ │ │ │
11
│ │ │ │ -
12namespace Dune
│ │ │ │ -
13{
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
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_;
│ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ +
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,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
│ │ │ │ -
101 };
│ │ │ │ -
│ │ │ │ -
102
│ │ │ │ -
103}
│ │ │ │ -
104#endif
│ │ │ │ +
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
│ │ │ │ -
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
│ │ │ │ +
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,129 +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 │ │ │ │ │ - * _c_o_m_m_o_n │ │ │ │ │ -localkey.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_LOCALKEY_HH │ │ │ │ │ -6#define DUNE_LOCALKEY_HH │ │ │ │ │ +5#ifndef DUNE_PK1DLOCALFINITEELEMENT_HH │ │ │ │ │ +6#define DUNE_PK1DLOCALFINITEELEMENT_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 │ │ │ │ │ -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_; │ │ │ │ │ +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_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 │ │ │ │ │ -101 }; │ │ │ │ │ -102 │ │ │ │ │ -103} │ │ │ │ │ -104#endif │ │ │ │ │ +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_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_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 │ │ │ │ │ _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_:_:_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/a00509.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: localtoglobaladaptors.hh File Reference │ │ │ │ +dune-localfunctions: pqkfactory.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -65,51 +65,49 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ Classes | │ │ │ │ Namespaces
│ │ │ │ -
localtoglobaladaptors.hh File Reference
│ │ │ │ +
pqkfactory.hh File Reference
│ │ │ │
│ │ │ │
│ │ │ │ -
#include <cstddef>
│ │ │ │ -#include <vector>
│ │ │ │ -#include <dune/common/fmatrix.hh>
│ │ │ │ -#include <dune/common/fvector.hh>
│ │ │ │ -#include <dune/common/typetraits.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

struct  Dune::LocalToGlobalBasisAdaptorTraits< LocalBasisTraits, dimDomainGlobal_ >
 Traits class for local-to-global basis adaptors. More...
struct  Dune::DimSpecificPQkLocalFiniteElementFactory< D, R, d, k >
 Factory that only creates dimension specific local finite elements. More...
 
class  Dune::ScalarLocalToGlobalBasisAdaptor< LocalBasis, Geometry >
 Convert a simple scalar local basis into a global basis. More...
struct  Dune::DimSpecificPQkLocalFiniteElementFactory< D, R, 3, k >
 Factory that only creates dimension specific local finite elements. More...
 
class  Dune::LocalToGlobalInterpolationAdaptor< LocalInterpolation, Traits_ >
 Convert a local interpolation into a global interpolation. More...
struct  Dune::PQkLocalFiniteElementFactory< D, R, dim, k >
 Factory to create any kind of Pk/Qk like element wrapped for the virtual interface. 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::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,44 +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 │ │ │ │ │ - * _c_o_m_m_o_n │ │ │ │ │ + * _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 │ │ │ │ │ -localtoglobaladaptors.hh File Reference │ │ │ │ │ -#include │ │ │ │ │ -#include │ │ │ │ │ -#include │ │ │ │ │ -#include │ │ │ │ │ -#include │ │ │ │ │ +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> │ │ │ │ │ _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_._._. │ │ │ │ │ +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/a00509_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: localtoglobaladaptors.hh Source File │ │ │ │ +dune-localfunctions: pqkfactory.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -70,270 +70,217 @@ │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
localtoglobaladaptors.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
│ │ │ │ -
6#ifndef DUNE_LOCALFUNCTIONS_COMMON_LOCALTOGLOBALADAPTORS_HH
│ │ │ │ -
7#define DUNE_LOCALFUNCTIONS_COMMON_LOCALTOGLOBALADAPTORS_HH
│ │ │ │ -
8
│ │ │ │ -
9#include <cstddef>
│ │ │ │ -
10#include <vector>
│ │ │ │ +
5#ifndef DUNE_LOCALFUNCTIONS_LAGRANGE_PQKFACTORY_HH
│ │ │ │ +
6#define DUNE_LOCALFUNCTIONS_LAGRANGE_PQKFACTORY_HH
│ │ │ │ +
7
│ │ │ │ +
8#include <map>
│ │ │ │ +
9
│ │ │ │ +
10#include <dune/geometry/type.hh>
│ │ │ │
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_>
│ │ │ │ -
│ │ │ │ - │ │ │ │ - │ │ │ │ -
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;
│ │ │ │ + │ │ │ │ + │ │ │ │ +
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
│ │ │ │ -
82 public:
│ │ │ │ -
83 typedef LocalToGlobalBasisAdaptorTraits<typename LocalBasis::Traits,
│ │ │ │ -
84 Geometry::coorddimension> Traits;
│ │ │ │ -
85
│ │ │ │ +
│ │ │ │ +
83 static FiniteElementType* create(const GeometryType& gt)
│ │ │ │ +
84 {
│ │ │ │ +
85 if (k==0)
│ │ │ │ + │ │ │ │
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;
│ │ │ │ -
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
│ │ │ │ +
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
│ │ │ │ -
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
│ │ │ │ +
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,333 +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 │ │ │ │ │ - * _c_o_m_m_o_n │ │ │ │ │ -localtoglobaladaptors.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 │ │ │ │ │ -6#ifndef DUNE_LOCALFUNCTIONS_COMMON_LOCALTOGLOBALADAPTORS_HH │ │ │ │ │ -7#define DUNE_LOCALFUNCTIONS_COMMON_LOCALTOGLOBALADAPTORS_HH │ │ │ │ │ -8 │ │ │ │ │ -9#include │ │ │ │ │ -10#include │ │ │ │ │ +5#ifndef DUNE_LOCALFUNCTIONS_LAGRANGE_PQKFACTORY_HH │ │ │ │ │ +6#define DUNE_LOCALFUNCTIONS_LAGRANGE_PQKFACTORY_HH │ │ │ │ │ +7 │ │ │ │ │ +8#include │ │ │ │ │ +9 │ │ │ │ │ +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; │ │ │ │ │ +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 │ │ │ │ │ -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 │ │ │ │ │ +_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 │ │ │ │ │ -_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; │ │ │ │ │ -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 │ │ │ │ │ +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_w_r_a_p_p_e_r_s_._h_h │ │ │ │ │ +_v_i_r_t_u_a_l_i_n_t_e_r_f_a_c_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_c_u_b_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 │ │ │ │ │ +_p_0_._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_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 │ │ │ │ │ +_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/a00512.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: interfaceswitch.hh File Reference │ │ │ │ +dune-localfunctions: emptypoints.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -65,40 +65,35 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ Classes | │ │ │ │ Namespaces
│ │ │ │ -
interfaceswitch.hh File Reference
│ │ │ │ +
emptypoints.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>
│ │ │ │ +
#include <vector>
│ │ │ │ +#include <dune/common/fvector.hh>
│ │ │ │ +#include <dune/localfunctions/common/localkey.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...
class  Dune::LagrangePoint< F, dim >
 
struct  Dune::BasisInterfaceSwitch< Basis, Dummy >
 Switch for uniform treatment of local and global basis classes. More...
class  Dune::EmptyPointSet< F, dim >
 
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ 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 │ │ │ │ │ - * _c_o_m_m_o_n │ │ │ │ │ + * _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 │ │ │ │ │ -interfaceswitch.hh File Reference │ │ │ │ │ -#include │ │ │ │ │ -#include │ │ │ │ │ +emptypoints.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_:_:_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_._._. │ │ │ │ │ +class   _D_u_n_e_:_:_L_a_g_r_a_n_g_e_P_o_i_n_t_<_ _F_,_ _d_i_m_ _> │ │ │ │ │   │ │ │ │ │ -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_:_:_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/a00512_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: interfaceswitch.hh Source File │ │ │ │ +dune-localfunctions: emptypoints.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -70,198 +70,185 @@ │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
interfaceswitch.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
│ │ │ │ -
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>
│ │ │ │ +
5#ifndef DUNE_LAGRANGE_EMPTYPOINTS_HH
│ │ │ │ +
6#define DUNE_LAGRANGE_EMPTYPOINTS_HH
│ │ │ │ +
7
│ │ │ │ +
8#include <vector>
│ │ │ │ +
9
│ │ │ │ +
10#include <dune/common/fvector.hh>
│ │ │ │ + │ │ │ │
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; }
│ │ │ │ +
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 }
│ │ │ │
│ │ │ │ -
93 };
│ │ │ │ +
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#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
│ │ │ │ +
│ │ │ │ +
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
│ │ │ │ -
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
│ │ │ │ +
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,230 +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 │ │ │ │ │ - * _c_o_m_m_o_n │ │ │ │ │ -interfaceswitch.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 │ │ │ │ │ -5 │ │ │ │ │ -6#ifndef DUNE_LOCALFUNCTIONS_COMMON_INTERFACESWITCH_HH │ │ │ │ │ -7#define DUNE_LOCALFUNCTIONS_COMMON_INTERFACESWITCH_HH │ │ │ │ │ -8 │ │ │ │ │ -9#include │ │ │ │ │ -10#include │ │ │ │ │ -11#include │ │ │ │ │ +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 │ │ │ │ │ -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 }; │ │ │ │ │ +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 │ │ │ │ │ -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 │ │ │ │ │ +_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_:_:_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_:_:_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/a00515.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: virtualwrappers.hh File Reference │ │ │ │ +dune-localfunctions: lagrangecoefficients.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -65,48 +65,35 @@ │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ Classes | │ │ │ │ Namespaces
│ │ │ │ -
virtualwrappers.hh File Reference
│ │ │ │ +
lagrangecoefficients.hh File Reference
│ │ │ │
│ │ │ │
│ │ │ │ -
#include <array>
│ │ │ │ -#include <dune/localfunctions/common/localbasis.hh>
│ │ │ │ -#include <dune/localfunctions/common/localkey.hh>
│ │ │ │ -#include <dune/localfunctions/common/virtualinterface.hh>
│ │ │ │ +
#include <vector>
│ │ │ │ +#include <dune/common/fvector.hh>
│ │ │ │ +#include <dune/geometry/type.hh>
│ │ │ │ +#include <dune/localfunctions/utility/field.hh>
│ │ │ │ +#include <dune/localfunctions/common/localkey.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...
struct  Dune::LagrangeCoefficientsFactory< LP, dim, F >
 
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ 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 │ │ │ │ │ - * _c_o_m_m_o_n │ │ │ │ │ + * _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 │ │ │ │ │ -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> │ │ │ │ │ +lagrangecoefficients.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> │ │ │ │ │ #include <_d_u_n_e_/_l_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 │ │ │ │ │ -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_._._. │ │ │ │ │ +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/a00515_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: virtualwrappers.hh Source File │ │ │ │ +dune-localfunctions: lagrangecoefficients.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -70,410 +70,81 @@ │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
virtualwrappers.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_COMMON_VIRTUALWRAPPERS_HH
│ │ │ │ -
6#define DUNE_LOCALFUNCTIONS_COMMON_VIRTUALWRAPPERS_HH
│ │ │ │ +
5#ifndef DUNE_LAGRANGECOEFFICIENTS_HH
│ │ │ │ +
6#define DUNE_LAGRANGECOEFFICIENTS_HH
│ │ │ │
7
│ │ │ │ -
8#include <array>
│ │ │ │ +
8#include <vector>
│ │ │ │
9
│ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ +
10#include <dune/common/fvector.hh>
│ │ │ │ +
11
│ │ │ │ +
12#include <dune/geometry/type.hh>
│ │ │ │
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 }
│ │ │ │ +
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 }
│ │ │ │
│ │ │ │ -
29 };
│ │ │ │ +
42 static void release( Object *object ) { delete object; }
│ │ │ │ +
43 };
│ │ │ │
│ │ │ │ -
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 {
│ │ │ │ - │ │ │ │ +
44
│ │ │ │ +
45}
│ │ │ │
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 // -----------------------------------------------------------------
│ │ │ │ -
63
│ │ │ │ -
64
│ │ │ │ -
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 }
│ │ │ │ -
│ │ │ │ -
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 }
│ │ │ │ -
│ │ │ │ -
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
│ │ │ │ - │ │ │ │ - │ │ │ │ +
47#endif // DUNE_LAGRANGECOEFFICIENTS_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
│ │ │ │ -
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
│ │ │ │ - │ │ │ │ +
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,489 +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 │ │ │ │ │ - * _c_o_m_m_o_n │ │ │ │ │ -virtualwrappers.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_COMMON_VIRTUALWRAPPERS_HH │ │ │ │ │ -6#define DUNE_LOCALFUNCTIONS_COMMON_VIRTUALWRAPPERS_HH │ │ │ │ │ +5#ifndef DUNE_LAGRANGECOEFFICIENTS_HH │ │ │ │ │ +6#define DUNE_LAGRANGECOEFFICIENTS_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_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> │ │ │ │ │ +10#include │ │ │ │ │ +11 │ │ │ │ │ +12#include │ │ │ │ │ 13 │ │ │ │ │ -14namespace _D_u_n_e │ │ │ │ │ -15{ │ │ │ │ │ +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 │ │ │ │ │ -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) │ │ │ │ │ +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 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; │ │ │ │ │ +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} │ │ │ │ │ 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 // ----------------------------------------------------------------- │ │ │ │ │ -63 │ │ │ │ │ -64 │ │ │ │ │ -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 } │ │ │ │ │ -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 │ │ │ │ │ -_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 │ │ │ │ │ -_v_i_r_t_u_a_l_i_n_t_e_r_f_a_c_e_._h_h │ │ │ │ │ +47#endif // DUNE_LAGRANGECOEFFICIENTS_HH │ │ │ │ │ _l_o_c_a_l_k_e_y_._h_h │ │ │ │ │ +_f_i_e_l_d_._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_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 │ │ │ │ │ -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 │ │ │ │ │ -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 │ │ │ │ │ -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 │ │ │ │ │ +_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/a00518.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: localfiniteelementtraits.hh File Reference │ │ │ │ +dune-localfunctions: lagrangepyramid.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -65,31 +65,40 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ Classes | │ │ │ │ Namespaces
│ │ │ │ -
localfiniteelementtraits.hh File Reference
│ │ │ │ +
lagrangepyramid.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>
│ │ │ │ +
│ │ │ │

Go to the source code of this file.

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

│ │ │ │ Classes

struct  Dune::LocalFiniteElementTraits< LB, LC, LI >
 traits helper struct More...
class  Dune::LagrangePyramidLocalFiniteElement< D, R, k >
 Lagrange finite element for 3d pyramids with compile-time polynomial order. More...
 
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ Namespaces

namespace  Dune
 
│ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,19 +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 │ │ │ │ │ - * _c_o_m_m_o_n │ │ │ │ │ + * _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 │ │ │ │ │ -localfiniteelementtraits.hh File Reference │ │ │ │ │ +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_:_:_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_:_:_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/a00518_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: localfiniteelementtraits.hh Source File │ │ │ │ +dune-localfunctions: lagrangepyramid.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -70,50 +70,824 @@ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
localfiniteelementtraits.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_LOCALFINITEELEMENTTRAITS_HH
│ │ │ │ -
6#define DUNE_LOCALFINITEELEMENTTRAITS_HH
│ │ │ │ +
5#ifndef DUNE_LOCALFUNCTIONS_LAGRANGE_LAGRANGEPYRAMID_HH
│ │ │ │ +
6#define DUNE_LOCALFUNCTIONS_LAGRANGE_LAGRANGEPYRAMID_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
│ │ │ │ +
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
│ │ │ │ +
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 }
│ │ │ │ +
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
│ │ │ │ +
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,48 +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 │ │ │ │ │ - * _c_o_m_m_o_n │ │ │ │ │ -localfiniteelementtraits.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_LOCALFINITEELEMENTTRAITS_HH │ │ │ │ │ -6#define DUNE_LOCALFINITEELEMENTTRAITS_HH │ │ │ │ │ +5#ifndef DUNE_LOCALFUNCTIONS_LAGRANGE_LAGRANGEPYRAMID_HH │ │ │ │ │ +6#define DUNE_LOCALFUNCTIONS_LAGRANGE_LAGRANGEPYRAMID_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 │ │ │ │ │ +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) │ │ │ │ │ +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_k_e_y_._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_:_:_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/a00521.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: mimeticall.hh File Reference │ │ │ │ +dune-localfunctions: lagrangesimplex.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -65,42 +65,41 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ Classes | │ │ │ │ Namespaces
│ │ │ │ -
mimeticall.hh File Reference
│ │ │ │ +
lagrangesimplex.hh File Reference
│ │ │ │
│ │ │ │
│ │ │ │ -
#include <cstddef>
│ │ │ │ -#include <dune/common/exceptions.hh>
│ │ │ │ -#include <dune/common/fvector.hh>
│ │ │ │ +
#include <array>
│ │ │ │ +#include <numeric>
│ │ │ │ +#include <dune/common/deprecated.hh>
│ │ │ │ #include <dune/common/fmatrix.hh>
│ │ │ │ -#include <dune/geometry/type.hh>
│ │ │ │ -#include "../common/localbasis.hh"
│ │ │ │ -#include "../common/localkey.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::MimeticLocalBasis< D, R, dim >
 
class  Dune::MimeticLocalInterpolation< LB >
 
class  Dune::MimeticLocalCoefficients
 ! More...
class  Dune::LagrangeSimplexLocalFiniteElement< D, R, d, k >
 Lagrange finite element for simplices with arbitrary compile-time dimension and polynomial order. More...
 
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ Namespaces

namespace  Dune
 
│ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,30 +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_i_m_e_t_i_c │ │ │ │ │ + * _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 │ │ │ │ │ -mimeticall.hh File Reference │ │ │ │ │ -#include │ │ │ │ │ -#include │ │ │ │ │ -#include │ │ │ │ │ +lagrangesimplex.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" │ │ │ │ │ -#include "_._._/_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_/_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_:_:_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_:_:_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   _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: mimeticall.hh Source File │ │ │ │ +dune-localfunctions: lagrangesimplex.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -70,173 +70,876 @@ │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
mimeticall.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_MIMETIC_ALL_HH
│ │ │ │ -
6#define DUNE_MIMETIC_ALL_HH
│ │ │ │ +
5#ifndef DUNE_LOCALFUNCTIONS_LAGRANGE_LAGRANGESIMPLEX_HH
│ │ │ │ +
6#define DUNE_LOCALFUNCTIONS_LAGRANGE_LAGRANGESIMPLEX_HH
│ │ │ │
7
│ │ │ │ -
8#include <cstddef>
│ │ │ │ -
9
│ │ │ │ -
10#include <dune/common/exceptions.hh>
│ │ │ │ -
11#include <dune/common/fvector.hh>
│ │ │ │ +
8#include <array>
│ │ │ │ +
9#include <numeric>
│ │ │ │ +
10
│ │ │ │ +
11#include <dune/common/deprecated.hh>
│ │ │ │
12#include <dune/common/fmatrix.hh>
│ │ │ │ -
13
│ │ │ │ -
14#include <dune/geometry/type.hh>
│ │ │ │ +
13#include <dune/common/fvector.hh>
│ │ │ │ +
14#include <dune/common/math.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 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 }
│ │ │ │ -
│ │ │ │ +
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
│ │ │ │ -
│ │ │ │ -
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
│ │ │ │ +
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 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 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
│ │ │ │ -
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
│ │ │ │ +
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,193 +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 │ │ │ │ │ - * _m_i_m_e_t_i_c │ │ │ │ │ -mimeticall.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_MIMETIC_ALL_HH │ │ │ │ │ -6#define DUNE_MIMETIC_ALL_HH │ │ │ │ │ +5#ifndef DUNE_LOCALFUNCTIONS_LAGRANGE_LAGRANGESIMPLEX_HH │ │ │ │ │ +6#define DUNE_LOCALFUNCTIONS_LAGRANGE_LAGRANGESIMPLEX_HH │ │ │ │ │ 7 │ │ │ │ │ -8#include │ │ │ │ │ -9 │ │ │ │ │ -10#include │ │ │ │ │ -11#include │ │ │ │ │ +8#include │ │ │ │ │ +9#include │ │ │ │ │ +10 │ │ │ │ │ +11#include │ │ │ │ │ 12#include │ │ │ │ │ -13 │ │ │ │ │ -14#include │ │ │ │ │ +13#include │ │ │ │ │ +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"); │ │ │ │ │ +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 │ │ │ │ │ -_6_3 unsigned int _o_r_d_e_r () const │ │ │ │ │ +62 // Specialization for first-order case │ │ │ │ │ +63 if (k==1) │ │ │ │ │ 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_) │ │ │ │ │ +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 for (unsigned int i=0; i li; │ │ │ │ │ -112 }; │ │ │ │ │ -113} │ │ │ │ │ -114 │ │ │ │ │ -115#endif │ │ │ │ │ +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=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& 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_k_e_y_._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_:_:_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 │ │ │ │ │ -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 │ │ │ │ │ +_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/a00524.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: refined.hh File Reference │ │ │ │ +dune-localfunctions: q1.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -65,30 +65,42 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
refined.hh File Reference
│ │ │ │ +
│ │ │ │ +Classes | │ │ │ │ +Namespaces
│ │ │ │ +
q1.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 <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.

│ │ │ │ -

Detailed Description

│ │ │ │ -

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

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

│ │ │ │ +Classes

class  Dune::Q1FiniteElementFactory< Geometry, RF >
 Factory for global-valued Q1 elements. More...
 
│ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ +

│ │ │ │ +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 │ │ │ │ │ +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_. │ │ │ │ │ -********** DDeettaaiilleedd DDeessccrriippttiioonn ********** │ │ │ │ │ -Convenience header that includes all available LocalFiniteElements based on │ │ │ │ │ -uniform element refinement. │ │ │ │ │ +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_._._. │ │ │ │ │ +  │ │ │ │ │ +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/a00524_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: refined.hh Source File │ │ │ │ +dune-localfunctions: q1.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -70,29 +70,75 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
refined.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
│ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ -
Piecewise P0 finite element.
│ │ │ │ +
5
│ │ │ │ +
6#ifndef DUNE_Q1_LOCALFINITEELEMENT_HH
│ │ │ │ +
7#define DUNE_Q1_LOCALFINITEELEMENT_HH
│ │ │ │ +
8
│ │ │ │ +
9#include <dune/geometry/type.hh>
│ │ │ │ +
10
│ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ +
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
│ │ │ │ +
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
│ │ │ │ +
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,20 +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 │ │ │ │ │ -refined.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 │ │ │ │ │ -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 │ │ │ │ │ +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> │ │ │ │ │ +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 │ │ │ │ │ +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_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_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_c_u_b_e_._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_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/a00527.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: refinedp0localinterpolation.hh File Reference │ │ │ │ +dune-localfunctions: p0.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -65,37 +65,36 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ Classes | │ │ │ │ Namespaces
│ │ │ │ -
refinedp0localinterpolation.hh File Reference
│ │ │ │ +
p0.hh File Reference
│ │ │ │
│ │ │ │
│ │ │ │ -
#include <dune/localfunctions/refined/refinedp0/refinedp0localbasis.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::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::P0LocalFiniteElement< D, R, d >
 The local p0 finite element on all types of reference elements. More...
 
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ Namespaces

namespace  Dune
 
│ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,26 +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_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> │ │ │ │ │ +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_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_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 │ │ │ │ │   │ │ │ │ │ =============================================================================== │ │ │ │ │ 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: refinedp0localinterpolation.hh Source File │ │ │ │ +dune-localfunctions: p0.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -70,197 +70,118 @@ │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
refinedp0localinterpolation.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_P0_LOCALINTERPOLATION_HH
│ │ │ │ -
6#define DUNE_REFINED_P0_LOCALINTERPOLATION_HH
│ │ │ │ +
5#ifndef DUNE_P0LOCALFINITEELEMENT_HH
│ │ │ │ +
6#define DUNE_P0LOCALFINITEELEMENT_HH
│ │ │ │
7
│ │ │ │ - │ │ │ │ +
8#include <dune/geometry/type.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 }
│ │ │ │ + │ │ │ │ +
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 {}
│ │ │ │
│ │ │ │
37
│ │ │ │ -
38
│ │ │ │ -
39 template<typename F, typename C>
│ │ │ │
│ │ │ │ -
40 void interpolate (const F& f, std::vector<C>& out) const
│ │ │ │ +
40 const typename Traits::LocalBasisType& localBasis () 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;
│ │ │ │ -
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 }
│ │ │ │ +
42 return basis;
│ │ │ │ +
43 }
│ │ │ │
│ │ │ │ -
79
│ │ │ │ +
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 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
│ │ │ │ - │ │ │ │ +
81#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
│ │ │ │ +
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,191 +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_0 │ │ │ │ │ -refinedp0localinterpolation.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_P0_LOCALINTERPOLATION_HH │ │ │ │ │ -6#define DUNE_REFINED_P0_LOCALINTERPOLATION_HH │ │ │ │ │ +5#ifndef DUNE_P0LOCALFINITEELEMENT_HH │ │ │ │ │ +6#define DUNE_P0LOCALFINITEELEMENT_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 } │ │ │ │ │ +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 {} │ │ │ │ │ 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 │ │ │ │ │ +_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 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 > │ │ │ │ │ -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 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 │ │ │ │ │ +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 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 │ │ │ │ │ +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_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 │ │ │ │ │ +_p_0_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_:_:_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_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/a00530.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: refinedp0localbasis.hh File Reference │ │ │ │ +dune-localfunctions: pq22d.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -65,36 +65,34 @@ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ Classes | │ │ │ │ Namespaces
│ │ │ │ -
refinedp0localbasis.hh File Reference
│ │ │ │ +
pq22d.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 <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::RefinedP0LocalBasis< D, R, dim >
 Uniformly refined constant shape functions on a unit simplex in R^dim. More...
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 │ │ │ │ │ -refinedp0localbasis.hh File Reference │ │ │ │ │ -#include │ │ │ │ │ -#include │ │ │ │ │ +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_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> │ │ │ │ │ +#include <_d_u_n_e_/_l_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_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_._._. │ │ │ │ │ +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/a00530_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: refinedp0localbasis.hh Source File │ │ │ │ +dune-localfunctions: pq22d.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -70,119 +70,132 @@ │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
refinedp0localbasis.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_LOCALBASIS_HH
│ │ │ │ -
6#define DUNE_REFINED_P0_LOCALBASIS_HH
│ │ │ │ +
5#ifndef DUNE_PQ22DLOCALFINITEELEMENT_HH
│ │ │ │ +
6#define DUNE_PQ22DLOCALFINITEELEMENT_HH
│ │ │ │
7
│ │ │ │ -
8#include <numeric>
│ │ │ │ +
8#include <dune/common/fmatrix.hh>
│ │ │ │
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
│ │ │ │ -
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.
│ │ │ │ + │ │ │ │ +
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 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
│ │ │ │ -
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
│ │ │ │ - │ │ │ │ + │ │ │ │ +
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,131 +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 │ │ │ │ │ -refinedp0localbasis.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_LOCALBASIS_HH │ │ │ │ │ -6#define DUNE_REFINED_P0_LOCALBASIS_HH │ │ │ │ │ +5#ifndef DUNE_PQ22DLOCALFINITEELEMENT_HH │ │ │ │ │ +6#define DUNE_PQ22DLOCALFINITEELEMENT_HH │ │ │ │ │ 7 │ │ │ │ │ -8#include │ │ │ │ │ +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 │ │ │ │ │ -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. │ │ │ │ │ +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 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} │ │ │ │ │ +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_c_u_b_e_._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_:_:_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 │ │ │ │ │ +_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 refinedp0localbasis.hh:49 │ │ │ │ │ -_l_o_c_a_l_b_a_s_i_s_._h_h │ │ │ │ │ +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/a00533.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: refinedp0localcoefficients.hh File Reference │ │ │ │ +dune-localfunctions: nedelec1stkindsimplex.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -65,35 +65,39 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ Classes | │ │ │ │ Namespaces
│ │ │ │ -
refinedp0localcoefficients.hh File Reference
│ │ │ │ +
nedelec1stkindsimplex.hh File Reference
│ │ │ │
│ │ │ │
│ │ │ │ -
#include <cstddef>
│ │ │ │ -#include <iostream>
│ │ │ │ -#include <vector>
│ │ │ │ -#include <dune/localfunctions/common/localkey.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::RefinedP0LocalCoefficients< k >
 Layout map for RefinedP0 elements. More...
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 @@ │ │ │ │ │ -us-ascii │ │ │ │ │ +utf-8 │ │ │ │ ├── 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 │ │ │ │ │ - * _r_e_f_i_n_e_d │ │ │ │ │ - * _r_e_f_i_n_e_d_p_0 │ │ │ │ │ + * _n_e_d_e_l_e_c │ │ │ │ │ _C_l_a_s_s_e_s | _N_a_m_e_s_p_a_c_e_s │ │ │ │ │ -refinedp0localcoefficients.hh File Reference │ │ │ │ │ -#include │ │ │ │ │ -#include │ │ │ │ │ -#include │ │ │ │ │ +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_:_:_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_:_:_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/a00533_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: refinedp0localcoefficients.hh Source File │ │ │ │ +dune-localfunctions: nedelec1stkindsimplex.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -70,85 +70,423 @@ │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
refinedp0localcoefficients.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 DUNE_REFINED_P0_LOCALCOEFFICIENTS_HH
│ │ │ │ -
6#define DUNE_REFINED_P0_LOCALCOEFFICIENTS_HH
│ │ │ │ +
5#ifndef DUNE_LOCALFUNCTIONS_NEDELEC_NEDELEC1STKINDSIMPLEX_HH
│ │ │ │ +
6#define DUNE_LOCALFUNCTIONS_NEDELEC_NEDELEC1STKINDSIMPLEX_HH
│ │ │ │
7
│ │ │ │ -
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}
│ │ │ │ +
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
│ │ │ │ -
58#endif
│ │ │ │ - │ │ │ │ +
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
│ │ │ │ -
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
│ │ │ │ +
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,82 +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 │ │ │ │ │ - * _r_e_f_i_n_e_d │ │ │ │ │ - * _r_e_f_i_n_e_d_p_0 │ │ │ │ │ -refinedp0localcoefficients.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 DUNE_REFINED_P0_LOCALCOEFFICIENTS_HH │ │ │ │ │ -6#define DUNE_REFINED_P0_LOCALCOEFFICIENTS_HH │ │ │ │ │ +5#ifndef DUNE_LOCALFUNCTIONS_NEDELEC_NEDELEC1STKINDSIMPLEX_HH │ │ │ │ │ +6#define DUNE_LOCALFUNCTIONS_NEDELEC_NEDELEC1STKINDSIMPLEX_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 │ │ │ │ │ -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} │ │ │ │ │ +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 │ │ │ │ │ -58#endif │ │ │ │ │ +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_k_e_y_._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_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/a00536.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: refinedp1.hh File Reference │ │ │ │ +dune-localfunctions: nedelec1stkindcube.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -65,36 +65,40 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ Classes | │ │ │ │ Namespaces
│ │ │ │ -
refinedp1.hh File Reference
│ │ │ │ +
nedelec1stkindcube.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 <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.

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

│ │ │ │ Classes

class  Dune::RefinedP1LocalFiniteElement< D, R, dim >
 Piecewise linear continuous Lagrange functions on a uniformly refined simplex element. More...
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,25 +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_e_f_i_n_e_d │ │ │ │ │ + * _n_e_d_e_l_e_c │ │ │ │ │ _C_l_a_s_s_e_s | _N_a_m_e_s_p_a_c_e_s │ │ │ │ │ -refinedp1.hh File Reference │ │ │ │ │ +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_/_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> │ │ │ │ │ +#include <_d_u_n_e_/_l_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_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_._._. │ │ │ │ │ +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/a00536_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: refinedp1.hh Source File │ │ │ │ +dune-localfunctions: nedelec1stkindcube.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -70,120 +70,518 @@ │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
refinedp1.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_REFINED_REFINEDP1_HH
│ │ │ │ -
6#define DUNE_LOCALFUNCTIONS_REFINED_REFINEDP1_HH
│ │ │ │ +
5#ifndef DUNE_LOCALFUNCTIONS_NEDELEC_NEDELEC1STKINDCUBE_HH
│ │ │ │ +
6#define DUNE_LOCALFUNCTIONS_NEDELEC_NEDELEC1STKINDCUBE_HH
│ │ │ │
7
│ │ │ │ -
8#include <dune/geometry/type.hh>
│ │ │ │ +
8#include <numeric>
│ │ │ │
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
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
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.
│ │ │ │ +
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
│ │ │ │ -
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
│ │ │ │ +
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,140 +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 │ │ │ │ │ - * _r_e_f_i_n_e_d │ │ │ │ │ -refinedp1.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 │ │ │ │ │ -5#ifndef DUNE_LOCALFUNCTIONS_REFINED_REFINEDP1_HH │ │ │ │ │ -6#define DUNE_LOCALFUNCTIONS_REFINED_REFINEDP1_HH │ │ │ │ │ +5#ifndef DUNE_LOCALFUNCTIONS_NEDELEC_NEDELEC1STKINDCUBE_HH │ │ │ │ │ +6#define DUNE_LOCALFUNCTIONS_NEDELEC_NEDELEC1STKINDCUBE_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 <_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 │ │ │ │ │ -_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 │ │ │ │ │ +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_k_e_y_._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_:_:_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_:_:_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 │ │ │ │ │ +_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 │ │ │ │ │ -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 │ │ │ │ │ +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 │ │ │ │ │ -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 │ │ │ │ │ +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 │ │ │ │ │ -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 │ │ │ │ │ +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/a00539.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: refinedp1localbasis.hh File Reference │ │ │ │ +dune-localfunctions: nedelecsimplexbasis.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -65,54 +65,42 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ Classes | │ │ │ │ Namespaces
│ │ │ │ -
refinedp1localbasis.hh File Reference
│ │ │ │ +
nedelecsimplexbasis.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 <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::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...
struct  Dune::NedelecBasisFactory< dim, SF, CF >
 
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ 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 │ │ │ │ │ + * _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 │ │ │ │ │ -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> │ │ │ │ │ +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_:_:_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_._._. │ │ │ │ │ +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 │ │ │ │ │   │ │ │ │ │ -********** 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/a00539_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: refinedp1localbasis.hh Source File │ │ │ │ +dune-localfunctions: nedelecsimplexbasis.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -70,831 +70,55 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
refinedp1localbasis.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_REFINED_P1_LOCALBASIS_HH
│ │ │ │ -
6#define DUNE_REFINED_P1_LOCALBASIS_HH
│ │ │ │ -
7
│ │ │ │ -
12#include <numeric>
│ │ │ │ -
13
│ │ │ │ -
14#include <dune/common/fmatrix.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
│ │ │ │ - │ │ │ │ -
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.
│ │ │ │ +
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
│ │ │ │ -
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
│ │ │ │ +
Definition nedelecsimplexbasis.hh:43
│ │ │ │ +
Definition defaultbasisfactory.hh:38
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,869 +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 │ │ │ │ │ - * _r_e_f_i_n_e_d │ │ │ │ │ - * _r_e_f_i_n_e_d_p_1 │ │ │ │ │ -refinedp1localbasis.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_REFINED_P1_LOCALBASIS_HH │ │ │ │ │ -6#define DUNE_REFINED_P1_LOCALBASIS_HH │ │ │ │ │ -7 │ │ │ │ │ -12#include │ │ │ │ │ -13 │ │ │ │ │ -14#include │ │ │ │ │ +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 │ │ │ │ │ -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. │ │ │ │ │ +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 │ │ │ │ │ -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_:_:_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/a00542.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: refinedsimplexlocalbasis.hh File Reference │ │ │ │ +dune-localfunctions: nedelecsimplexprebasis.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -65,54 +65,45 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ Classes | │ │ │ │ Namespaces
│ │ │ │ -
refinedsimplexlocalbasis.hh File Reference
│ │ │ │ +
nedelecsimplexprebasis.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 <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::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...
struct  Dune::NedelecPreBasisFactory< dim, Field >
 
class  Dune::RefinedSimplexLocalBasis< D, 2 >
 Base class for LocalBasis classes based on uniform refinement in 2D; provides numbering and local coordinates of subelements. More...
struct  Dune::NedelecPreBasisFactory< dim, Field >::EvaluationBasisFactory< dd, FF >
 
class  Dune::RefinedSimplexLocalBasis< D, 3 >
 Base class for LocalBasis classes based on uniform refinement in 3D; provides numbering and local coordinates of subelements. More...
struct  Dune::NedelecVecMatrix< geometryId, Field >
 
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ Namespaces

namespace  Dune
 
│ │ │ │ -

Detailed Description

│ │ │ │ -

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

│ │ │ │ -
│ │ │ │ +
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,38 +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_e_f_i_n_e_d │ │ │ │ │ - * _c_o_m_m_o_n │ │ │ │ │ + * _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 │ │ │ │ │ -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> │ │ │ │ │ +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_:_:_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_ _> │ │ │ │ │ +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_:_:_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_._._. │ │ │ │ │ +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_:_:_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_._._. │ │ │ │ │ +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 │ │ │ │ │   │ │ │ │ │ -********** 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/a00542_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: refinedsimplexlocalbasis.hh Source File │ │ │ │ +dune-localfunctions: nedelecsimplexprebasis.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -70,291 +70,353 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
refinedsimplexlocalbasis.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_REFINED_SIMPLEX_LOCALBASIS_HH
│ │ │ │ -
6#define DUNE_REFINED_SIMPLEX_LOCALBASIS_HH
│ │ │ │ +
5#ifndef DUNE_LOCALFUNCTIONS_NEDELEC_NEDELECSIMPLEX_NEDELECSIMPLEXPREBASIS_HH
│ │ │ │ +
6#define DUNE_LOCALFUNCTIONS_NEDELEC_NEDELECSIMPLEX_NEDELECSIMPLEXPREBASIS_HH
│ │ │ │
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
│ │ │ │ - │ │ │ │ -
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
│ │ │ │ +
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;
│ │ │ │ + │ │ │ │ + │ │ │ │ +
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
│ │ │ │ -
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
│ │ │ │ - │ │ │ │ +
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,304 +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 │ │ │ │ │ - * _r_e_f_i_n_e_d │ │ │ │ │ - * _c_o_m_m_o_n │ │ │ │ │ -refinedsimplexlocalbasis.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_REFINED_SIMPLEX_LOCALBASIS_HH │ │ │ │ │ -6#define DUNE_REFINED_SIMPLEX_LOCALBASIS_HH │ │ │ │ │ +5#ifndef DUNE_LOCALFUNCTIONS_NEDELEC_NEDELECSIMPLEX_NEDELECSIMPLEXPREBASIS_HH │ │ │ │ │ +6#define DUNE_LOCALFUNCTIONS_NEDELEC_NEDELECSIMPLEX_NEDELECSIMPLEXPREBASIS_HH │ │ │ │ │ 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() {} │ │ │ │ │ -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 │ │ │ │ │ +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; │ │ │ │ │ +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_:_:_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_:_:_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/a00545.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: refinedp0.hh File Reference │ │ │ │ +dune-localfunctions: nedelecsimplexinterpolation.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -65,58 +65,57 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ Classes | │ │ │ │ Namespaces
│ │ │ │ -
refinedp0.hh File Reference
│ │ │ │ +
nedelecsimplexinterpolation.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 <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

class  Dune::RefinedP0LocalFiniteElement< D, R, dim >
 Local finite element that is piecewise P0 on a once uniformly refined reference geometry. More...
class  Dune::LocalCoefficientsContainer
 
struct  Dune::NedelecCoefficientsFactory< dim >
 
class  Dune::RefinedP0LocalFiniteElement< D, R, 1 >
 Local finite element that is piecewise P0 on a once uniformly refined reference geometry. More...
struct  Dune::NedelecL2InterpolationBuilder< dim, Field >
 
class  Dune::RefinedP0LocalFiniteElement< D, R, 2 >
 Local finite element that is piecewise P0 on a once uniformly refined reference geometry. More...
class  Dune::NedelecL2Interpolation< dimension, F >
 An L2-based interpolation for Nedelec. More...
 
class  Dune::RefinedP0LocalFiniteElement< D, R, 3 >
 Local finite element that is piecewise P0 on a once uniformly refined reference geometry. More...
struct  Dune::NedelecL2InterpolationFactory< dim, Field >
 
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ Namespaces

namespace  Dune
 
│ │ │ │ -

Detailed Description

│ │ │ │ -

Piecewise P0 finite element.

│ │ │ │ -
│ │ │ │ +
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,41 +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_e_f_i_n_e_d │ │ │ │ │ + * _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 │ │ │ │ │ -refinedp0.hh File Reference │ │ │ │ │ -Piecewise P0 finite element. _M_o_r_e_._._. │ │ │ │ │ +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_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" │ │ │ │ │ +#include <_d_u_n_e_/_l_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_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_._._. │ │ │ │ │ + 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_ _> │ │ │ │ │   │ │ │ │ │ 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/a00545_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: refinedp0.hh Source File │ │ │ │ +dune-localfunctions: nedelecsimplexinterpolation.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -70,264 +70,817 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
refinedp0.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 DUNE_REFINED_P0_LOCALFINITEELEMENT_HH
│ │ │ │ -
6#define DUNE_REFINED_P0_LOCALFINITEELEMENT_HH
│ │ │ │ +
5#ifndef DUNE_LOCALFUNCTIONS_NEDELEC_NEDELECSIMPLEX_NEDELECSIMPLEXINTERPOLATION_HH
│ │ │ │ +
6#define DUNE_LOCALFUNCTIONS_NEDELEC_NEDELECSIMPLEX_NEDELECSIMPLEXINTERPOLATION_HH
│ │ │ │
7
│ │ │ │ -
8#include <dune/geometry/type.hh>
│ │ │ │ -
9
│ │ │ │ - │ │ │ │ - │ │ │ │ -
12
│ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ -
16
│ │ │ │ -
20namespace Dune
│ │ │ │ -
21{
│ │ │ │ +
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
│ │ │ │ -
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
│ │ │ │ -
│ │ │ │ -
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:
│ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ +
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
│ │ │ │ +
│ │ │ │ +
57 std::size_t size () const
│ │ │ │ +
58 {
│ │ │ │ +
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 >
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
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
│ │ │ │ -
102 template<class D, class R>
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
104 {
│ │ │ │ -
105 public:
│ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ -
112
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
116 {}
│ │ │ │ -
│ │ │ │ -
117
│ │ │ │ -
│ │ │ │ -
120 const typename Traits::LocalBasisType& localBasis () const
│ │ │ │ -
121 {
│ │ │ │ -
122 return basis_;
│ │ │ │ -
123 }
│ │ │ │ -
│ │ │ │ +
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
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
128 {
│ │ │ │ -
129 return coefficients_;
│ │ │ │ -
130 }
│ │ │ │ -
│ │ │ │ +
125 // for the dofs associated to the edges
│ │ │ │ + │ │ │ │ + │ │ │ │ +
128
│ │ │ │ +
129 // the tangent of the edges
│ │ │ │ +
130 typedef FieldVector< Field, dimension > Tangent;
│ │ │ │
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
│ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ +
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
│ │ │ │ -
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
│ │ │ │ +
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
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,281 +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 │ │ │ │ │ - * _r_e_f_i_n_e_d │ │ │ │ │ -refinedp0.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 DUNE_REFINED_P0_LOCALFINITEELEMENT_HH │ │ │ │ │ -6#define DUNE_REFINED_P0_LOCALFINITEELEMENT_HH │ │ │ │ │ +5#ifndef │ │ │ │ │ +DUNE_LOCALFUNCTIONS_NEDELEC_NEDELECSIMPLEX_NEDELECSIMPLEXINTERPOLATION_HH │ │ │ │ │ +6#define │ │ │ │ │ +DUNE_LOCALFUNCTIONS_NEDELEC_NEDELECSIMPLEX_NEDELECSIMPLEXINTERPOLATION_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 "_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{ │ │ │ │ │ +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 │ │ │ │ │ -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 │ │ │ │ │ -_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_; │ │ │ │ │ +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 │ │ │ │ │ +_5_7 std::size_t _s_i_z_e () const │ │ │ │ │ +58 { │ │ │ │ │ +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 │ │ │ │ │ +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 │ │ │ │ │ -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 } │ │ │ │ │ +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 │ │ │ │ │ -_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 } │ │ │ │ │ +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 │ │ │ │ │ -_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_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 │ │ │ │ │ +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 │ │ │ │ │ +_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 │ │ │ │ │ _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 │ │ │ │ │ +_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 │ │ │ │ │ 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 │ │ │ │ │ +DDeeffiinniittiioonn polynomialbasis.hh:113 │ │ │ │ │ =============================================================================== │ │ │ │ │ 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: bdfmcube.hh File Reference │ │ │ │ +dune-localfunctions: brezzidouglasmarini.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -65,43 +65,25 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
│ │ │ │ -Classes | │ │ │ │ -Namespaces
│ │ │ │ -
bdfmcube.hh File Reference
│ │ │ │ +
brezzidouglasmarini.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>
│ │ │ │ + │ │ │ │

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...
 
│ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ -

│ │ │ │ -Namespaces

namespace  Dune
 
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,26 +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 │ │ │ │ │ - * _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 │ │ │ │ │ -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> │ │ │ │ │ +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_:_:_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/a00548_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: bdfmcube.hh Source File │ │ │ │ +dune-localfunctions: brezzidouglasmarini.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -70,95 +70,35 @@ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
bdfmcube.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_BREZZIDOUGLASFORTINMARINI_BDFMCUBE_HH
│ │ │ │ -
6#define DUNE_LOCALFUNCTIONS_BREZZIDOUGLASFORTINMARINI_BDFMCUBE_HH
│ │ │ │ +
5#ifndef DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI_HH
│ │ │ │ +
6#define DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI_HH
│ │ │ │
7
│ │ │ │ -
8#include <dune/geometry/type.hh>
│ │ │ │ -
9
│ │ │ │ - │ │ │ │ +
8// BDM implementations with compile-time order
│ │ │ │ + │ │ │ │ + │ │ │ │
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
│ │ │ │ -
│ │ │ │ -
80
│ │ │ │ -
81#endif // #ifndef DUNE_LOCALFUNCTIONS_BREZZIDOUGLASFORTINMARINI_BDFMCUBE_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
│ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ +
12#endif // #ifndef DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI_HH
│ │ │ │ + │ │ │ │ + │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,114 +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_f_o_r_t_i_n_m_a_r_i_n_i │ │ │ │ │ -bdfmcube.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_BREZZIDOUGLASFORTINMARINI_BDFMCUBE_HH │ │ │ │ │ -6#define DUNE_LOCALFUNCTIONS_BREZZIDOUGLASFORTINMARINI_BDFMCUBE_HH │ │ │ │ │ +5#ifndef DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI_HH │ │ │ │ │ +6#define DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI_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> │ │ │ │ │ +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 <_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 │ │ │ │ │ -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_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_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 │ │ │ │ │ +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/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/a01434.html │ │ │ │ @@ -80,15 +80,15 @@ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

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

│ │ │ │ │ │ │ │ -

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

│ │ │ │ +

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

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

│ │ │ │
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │
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/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/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 PowerBasis< typename Backend::Traits::Basis, dimR > Basis
 type of the Basis
 
typedef PowerCoefficients Coefficients
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ 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/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/a02346.html │ │ │ │ @@ -79,15 +79,15 @@ │ │ │ │
Dune::RT12DLocalInterpolation< LB > Class Template Reference
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

First order Raviart-Thomas shape functions on the reference quadrilateral. │ │ │ │ More...

│ │ │ │ │ │ │ │ -

#include <dune/localfunctions/raviartthomas/raviartthomas12d/raviartthomas12dlocalinterpolation.hh>

│ │ │ │ +

#include <dune/localfunctions/raviartthomas/raviartthomas12d/raviartthomas12dlocalinterpolation.hh>

│ │ │ │
│ │ │ │ Inheritance diagram for Dune::RT12DLocalInterpolation< LB >:
│ │ │ │
│ │ │ │
Inheritance graph
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -205,15 +205,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/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 @@ │ │ │ │

│ │ │ │
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │
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/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/a04538.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: localbasis.hh File Reference │ │ │ │ +dune-localfunctions: localcoefficients.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -72,44 +72,30 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ Classes | │ │ │ │ Namespaces
│ │ │ │ -
localbasis.hh File Reference
│ │ │ │ +
localcoefficients.hh File Reference
│ │ │ │
│ │ │ │
│ │ │ │ -
#include <algorithm>
│ │ │ │ -#include <array>
│ │ │ │ -#include <bitset>
│ │ │ │ -#include <numeric>
│ │ │ │ +
#include <cstddef>
│ │ │ │ #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/localbasis.hh>
│ │ │ │ +#include <dune/localfunctions/common/localkey.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::BDFMCubeLocalCoefficients< D, R, dim, order >
 Layout map for Brezzi-Douglas-Fortin-Marini elements on cubes. More...
 
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ Namespaces

namespace  Dune
 
│ │ │ │ ├── html2text {} │ │ │ │ │ @@ -3,42 +3,24 @@ │ │ │ │ │ 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 │ │ │ │ │ -localbasis.hh File Reference │ │ │ │ │ -#include │ │ │ │ │ -#include │ │ │ │ │ -#include │ │ │ │ │ -#include │ │ │ │ │ +localcoefficients.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_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_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_._._. │ │ │ │ │ +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/a04538_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: localbasis.hh Source File │ │ │ │ +dune-localfunctions: localcoefficients.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -74,385 +74,98 @@ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ -
brezzidouglasfortinmarini/cube/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_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 };
│ │ │ │ +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 }
│ │ │ │
│ │ │ │ -
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>;
│ │ │ │ +
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 public:
│ │ │ │ - │ │ │ │ +
65 template<class D, class R, unsigned int dim, unsigned int order>
│ │ │ │ +
66 constexpr unsigned int BDFMCubeLocalCoefficients<D, R, dim, order>::faceDofs;
│ │ │ │
67
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
70 {
│ │ │ │ -
71 std::fill(s_.begin(), s_.end(), 1);
│ │ │ │ -
72 }
│ │ │ │ -
│ │ │ │ +
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
│ │ │ │ -
│ │ │ │ -
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
│ │ │ │ +
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
│ │ │ │ -
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
│ │ │ │ - │ │ │ │ +
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 {} │ │ │ │ │ @@ -2,429 +2,110 @@ │ │ │ │ │ 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 │ │ │ │ │ +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_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 │ │ │ │ │ +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 } │ │ │ │ │ 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; │ │ │ │ │ +_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 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_>; │ │ │ │ │ +65 template │ │ │ │ │ +66 constexpr unsigned int BDFMCubeLocalCoefficients:: │ │ │ │ │ +faceDofs; │ │ │ │ │ 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 } │ │ │ │ │ +68 template │ │ │ │ │ +69 constexpr std::size_t BDFMCubeLocalCoefficients::numFaces; │ │ │ │ │ +70 │ │ │ │ │ +71 // template │ │ │ │ │ +72 // constexpr std::size_t BDFMCubeLocalCoefficients:: │ │ │ │ │ +numDofs; │ │ │ │ │ 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; } │ │ │ │ │ -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 │ │ │ │ │ +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_:_:_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() │ │ │ │ │ +_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/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 │ │ │ │ │ +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/a04541.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: localbasis.hh File Reference │ │ │ │ +dune-localfunctions: localcoefficients.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -65,31 +65,33 @@ │ │ │ │
│ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ Classes | │ │ │ │ Namespaces
│ │ │ │ -
localbasis.hh File Reference
│ │ │ │ +
localcoefficients.hh File Reference
│ │ │ │
│ │ │ │
│ │ │ │ - │ │ │ │ +
#include <array>
│ │ │ │ +#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::SimplexP1BubbleLocalCoefficients< dim >
 The Local keys associated to the dim-d local basis functions. More...
 
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ Namespaces

namespace  Dune
 
│ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,19 +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 │ │ │ │ │ - * _c_o_m_m_o_n │ │ │ │ │ + * _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 │ │ │ │ │ +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 │ │ │ │ │ -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_:_:_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/a04541_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: localbasis.hh Source File │ │ │ │ +dune-localfunctions: localcoefficients.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -70,62 +70,79 @@ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
common/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_COMMON_LOCALBASIS_HH
│ │ │ │ -
6#define DUNE_LOCALFUNCTIONS_COMMON_LOCALBASIS_HH
│ │ │ │ +
5#ifndef DUNE_LOCALFUNCTIONS_ENRICHED_SIMPLEXP1BUBBLE_LOCALCOEFFICIENTS_HH
│ │ │ │ +
6#define DUNE_LOCALFUNCTIONS_ENRICHED_SIMPLEXP1BUBBLE_LOCALCOEFFICIENTS_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;
│ │ │ │ +
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 }
│ │ │ │ +
│ │ │ │
41
│ │ │ │ -
43 typedef D DomainType;
│ │ │ │ -
44
│ │ │ │ -
46 typedef RF RangeFieldType;
│ │ │ │ +
│ │ │ │ +
43 const LocalKey& localKey (std::size_t i) const noexcept
│ │ │ │ +
44 {
│ │ │ │ +
45 return li_[i];
│ │ │ │ +
46 }
│ │ │ │ +
│ │ │ │
47
│ │ │ │ -
49 constexpr static int dimRange = m;
│ │ │ │ -
50
│ │ │ │ -
52 typedef R RangeType;
│ │ │ │ -
53
│ │ │ │ -
60 typedef J JacobianType;
│ │ │ │ -
61 };
│ │ │ │ +
48 private:
│ │ │ │ +
49 std::array<LocalKey, numVertices+1> li_;
│ │ │ │ +
50 };
│ │ │ │
│ │ │ │ -
62
│ │ │ │ -
63}
│ │ │ │ -
64#endif
│ │ │ │ +
51
│ │ │ │ +
52} // end namespace Dune
│ │ │ │ +
53
│ │ │ │ +
54#endif // DUNE_LOCALFUNCTIONS_ENRICHED_SIMPLEXP1BUBBLE_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
│ │ │ │ +
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 {} │ │ │ │ │ @@ -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 │ │ │ │ │ - * _c_o_m_m_o_n │ │ │ │ │ -common/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/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_COMMON_LOCALBASIS_HH │ │ │ │ │ -6#define DUNE_LOCALFUNCTIONS_COMMON_LOCALBASIS_HH │ │ │ │ │ +5#ifndef DUNE_LOCALFUNCTIONS_ENRICHED_SIMPLEXP1BUBBLE_LOCALCOEFFICIENTS_HH │ │ │ │ │ +6#define DUNE_LOCALFUNCTIONS_ENRICHED_SIMPLEXP1BUBBLE_LOCALCOEFFICIENTS_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; │ │ │ │ │ +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 } │ │ │ │ │ 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; │ │ │ │ │ +_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 │ │ │ │ │ -_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; │ │ │ │ │ +48 private: │ │ │ │ │ +49 std::array li_; │ │ │ │ │ +50 }; │ │ │ │ │ +51 │ │ │ │ │ +52} // end namespace Dune │ │ │ │ │ 53 │ │ │ │ │ -_6_0 typedef J _J_a_c_o_b_i_a_n_T_y_p_e; │ │ │ │ │ -61 }; │ │ │ │ │ -62 │ │ │ │ │ -63} │ │ │ │ │ -64#endif │ │ │ │ │ +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_:_:_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_:_:_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 │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a04544.html │ │ │ │ @@ -65,38 +65,51 @@ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ Classes | │ │ │ │ Namespaces
│ │ │ │
localbasis.hh File Reference
│ │ │ │
│ │ │ │
│ │ │ │ -
#include <numeric>
│ │ │ │ -#include <stdexcept>
│ │ │ │ +
#include <algorithm>
│ │ │ │ +#include <array>
│ │ │ │ +#include <bitset>
│ │ │ │ +#include <numeric>
│ │ │ │ #include <vector>
│ │ │ │ -#include <dune/common/fvector.hh>
│ │ │ │ #include <dune/common/fmatrix.hh>
│ │ │ │ +#include <dune/common/fvector.hh>
│ │ │ │ #include <dune/common/math.hh>
│ │ │ │ -#include <dune/localfunctions/common/localbasis.hh>
│ │ │ │ +#include <dune/common/rangeutilities.hh>
│ │ │ │ +#include <dune/common/typetraits.hh>
│ │ │ │ +#include <dune/localfunctions/common/localbasis.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::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 {} │ │ │ │ │ @@ -1,28 +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 │ │ │ │ │ - * _e_n_r_i_c_h_e_d │ │ │ │ │ - * _s_i_m_p_l_e_x_p_1_b_u_b_b_l_e │ │ │ │ │ + * _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 │ │ │ │ │ +#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_:_:_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. │ │ │ │ │ +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/a04544_source.html │ │ │ │ @@ -70,159 +70,389 @@ │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
enriched/simplexp1bubble/localbasis.hh
│ │ │ │ +
brezzidouglasfortinmarini/cube/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_LOCALBASIS_HH
│ │ │ │ -
6#define DUNE_LOCALFUNCTIONS_ENRICHED_SIMPLEXP1BUBBLE_LOCALBASIS_HH
│ │ │ │ +
5#ifndef DUNE_LOCALFUNCTIONS_BREZZIDOUGLASFORTINMARINI_CUBE_LOCALBASIS_HH
│ │ │ │ +
6#define DUNE_LOCALFUNCTIONS_BREZZIDOUGLASFORTINMARINI_CUBE_LOCALBASIS_HH
│ │ │ │
7
│ │ │ │ -
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 }
│ │ │ │ +
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; }
│ │ │ │
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];
│ │ │ │ +
│ │ │ │ +
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
│ │ │ │ -
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];
│ │ │ │ +
│ │ │ │ +
110 inline void evaluateJacobian (const DomainType& in, std::vector<JacobianType>& out) const
│ │ │ │ +
111 {
│ │ │ │ +
112 out.resize(4);
│ │ │ │
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
│ │ │ │ +
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
│ │ │ │ +
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,165 +1,430 @@ │ │ │ │ │ dune-localfunctions 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/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/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_LOCALBASIS_HH │ │ │ │ │ -6#define DUNE_LOCALFUNCTIONS_ENRICHED_SIMPLEXP1BUBBLE_LOCALBASIS_HH │ │ │ │ │ +5#ifndef DUNE_LOCALFUNCTIONS_BREZZIDOUGLASFORTINMARINI_CUBE_LOCALBASIS_HH │ │ │ │ │ +6#define DUNE_LOCALFUNCTIONS_BREZZIDOUGLASFORTINMARINI_CUBE_LOCALBASIS_HH │ │ │ │ │ 7 │ │ │ │ │ -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 } │ │ │ │ │ +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; } │ │ │ │ │ 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]; │ │ │ │ │ +_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 │ │ │ │ │ -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]; │ │ │ │ │ +_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] = -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 │ │ │ │ │ +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_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: localcoefficients.hh File Reference │ │ │ │ +dune-localfunctions: localbasis.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -65,37 +65,31 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ Classes | │ │ │ │ Namespaces
│ │ │ │ -
localcoefficients.hh File Reference
│ │ │ │ +
localbasis.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

class  Dune::BDFMCubeLocalCoefficients< D, R, dim, order >
 Layout map for Brezzi-Douglas-Fortin-Marini elements on cubes. More...
struct  Dune::LocalBasisTraits< DF, n, D, RF, m, R, J >
 Type traits for LocalBasisVirtualInterface. More...
 
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ Namespaces

namespace  Dune
 
│ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,26 +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 │ │ │ │ │ - * _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_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 │ │ │ │ │ -#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> │ │ │ │ │ +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_:_:_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_._._. │ │ │ │ │ +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/a04547_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: localcoefficients.hh Source File │ │ │ │ +dune-localfunctions: localbasis.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -70,102 +70,62 @@ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
brezzidouglasfortinmarini/cube/localcoefficients.hh
│ │ │ │ +
common/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);
│ │ │ │ +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;
│ │ │ │
47
│ │ │ │ -
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
│ │ │ │ - │ │ │ │ +
49 constexpr static int dimRange = m;
│ │ │ │ +
50
│ │ │ │ +
52 typedef R RangeType;
│ │ │ │ +
53
│ │ │ │ +
60 typedef J JacobianType;
│ │ │ │ +
61 };
│ │ │ │ +
│ │ │ │ +
62
│ │ │ │ +
63}
│ │ │ │ +
64#endif
│ │ │ │
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
│ │ │ │ +
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,111 +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 │ │ │ │ │ - * _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 │ │ │ │ │ + * _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// 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); │ │ │ │ │ +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; │ │ │ │ │ 47 │ │ │ │ │ -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 │ │ │ │ │ +_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 │ │ │ │ │ _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() │ │ │ │ │ -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 │ │ │ │ │ +_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/a04550.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: localcoefficients.hh File Reference │ │ │ │ +dune-localfunctions: localbasis.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -72,26 +72,31 @@ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ Classes | │ │ │ │ Namespaces
│ │ │ │ -
localcoefficients.hh File Reference
│ │ │ │ +
localbasis.hh File Reference
│ │ │ │
│ │ │ │
│ │ │ │ -
#include <array>
│ │ │ │ -#include <dune/localfunctions/common/localkey.hh>
│ │ │ │ +
#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>
│ │ │ │
│ │ │ │

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...
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 {} │ │ │ │ │ @@ -3,20 +3,26 @@ │ │ │ │ │ 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 │ │ │ │ │ -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 │ │ │ │ │ +#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_:_:_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_._._. │ │ │ │ │ +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_._._. │ │ │ │ │   │ │ │ │ │ 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: localcoefficients.hh Source File │ │ │ │ +dune-localfunctions: localbasis.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -74,75 +74,155 @@ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ -
enriched/simplexp1bubble/localcoefficients.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_ENRICHED_SIMPLEXP1BUBBLE_LOCALCOEFFICIENTS_HH
│ │ │ │ -
6#define DUNE_LOCALFUNCTIONS_ENRICHED_SIMPLEXP1BUBBLE_LOCALCOEFFICIENTS_HH
│ │ │ │ +
5#ifndef DUNE_LOCALFUNCTIONS_ENRICHED_SIMPLEXP1BUBBLE_LOCALBASIS_HH
│ │ │ │ +
6#define DUNE_LOCALFUNCTIONS_ENRICHED_SIMPLEXP1BUBBLE_LOCALBASIS_HH
│ │ │ │
7
│ │ │ │ -
8#include <array>
│ │ │ │ -
9
│ │ │ │ - │ │ │ │ +
8#include <numeric>
│ │ │ │ +
9#include <stdexcept>
│ │ │ │ +
10#include <vector>
│ │ │ │
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 }
│ │ │ │ -
│ │ │ │ -
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
│ │ │ │ +
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
│ │ │ │ -
54#endif // DUNE_LOCALFUNCTIONS_ENRICHED_SIMPLEXP1BUBBLE_LOCALCOEFFICIENTS_HH
│ │ │ │ - │ │ │ │ +
│ │ │ │ +
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
│ │ │ │
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
│ │ │ │ +
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 {} │ │ │ │ │ @@ -2,76 +2,164 @@ │ │ │ │ │ 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 │ │ │ │ │ +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_ENRICHED_SIMPLEXP1BUBBLE_LOCALCOEFFICIENTS_HH │ │ │ │ │ -6#define DUNE_LOCALFUNCTIONS_ENRICHED_SIMPLEXP1BUBBLE_LOCALCOEFFICIENTS_HH │ │ │ │ │ +5#ifndef DUNE_LOCALFUNCTIONS_ENRICHED_SIMPLEXP1BUBBLE_LOCALBASIS_HH │ │ │ │ │ +6#define DUNE_LOCALFUNCTIONS_ENRICHED_SIMPLEXP1BUBBLE_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> │ │ │ │ │ +8#include │ │ │ │ │ +9#include │ │ │ │ │ +10#include │ │ │ │ │ 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 } │ │ │ │ │ -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 │ │ │ │ │ +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 │ │ │ │ │ -54#endif // DUNE_LOCALFUNCTIONS_ENRICHED_SIMPLEXP1BUBBLE_LOCALCOEFFICIENTS_HH │ │ │ │ │ -_l_o_c_a_l_k_e_y_._h_h │ │ │ │ │ +_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 │ │ │ │ │ _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 │ │ │ │ │ +_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 coefficients. │ │ │ │ │ -DDeeffiinniittiioonn enriched/simplexp1bubble/localcoefficients.hh:37 │ │ │ │ │ +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/a04565.html │ │ │ │ @@ -79,17 +79,17 @@ │ │ │ │
basis.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/localtoglobaladaptors.hh>
│ │ │ │ +#include <dune/localfunctions/lagrange/lagrangesimplex.hh>
│ │ │ │ +#include <dune/localfunctions/whitney/edges0.5/common.hh>
│ │ │ │
│ │ │ │

Go to the source code of this file.

│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a04565_source.html │ │ │ │ @@ -91,17 +91,17 @@ │ │ │ │
8
│ │ │ │
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
│ │ │ │ @@ -247,17 +247,17 @@ │ │ │ │
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
│ │ │ │
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
│ │ │ │ ├── html2text {} │ │ │ │ │ @@ -164,17 +164,17 @@ │ │ │ │ │ 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 │ │ │ │ │ -_l_a_g_r_a_n_g_e_s_i_m_p_l_e_x_._h_h │ │ │ │ │ -_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 │ │ │ │ │ +_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 │ │ │ │ │ _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< │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a04568.html │ │ │ │ @@ -77,15 +77,15 @@ │ │ │ │ Classes | │ │ │ │ Namespaces │ │ │ │
coefficients.hh File Reference
│ │ │ │ │ │ │ │
│ │ │ │
#include <cstddef>
│ │ │ │ #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::EdgeS0_5Basis< Geometry, RF >
 Basis for order 0.5 (lowest order) edge elements on simplices. More...
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a04568_source.html │ │ │ │ @@ -88,15 +88,15 @@ │ │ │ │
5
│ │ │ │
6#ifndef DUNE_LOCALFUNCTIONS_META_POWER_COEFFICIENTS_HH
│ │ │ │
7#define DUNE_LOCALFUNCTIONS_META_POWER_COEFFICIENTS_HH
│ │ │ │
8
│ │ │ │
9#include <cstddef>
│ │ │ │
10#include <vector>
│ │ │ │
11
│ │ │ │ - │ │ │ │ + │ │ │ │
13
│ │ │ │
14namespace Dune {
│ │ │ │
15
│ │ │ │
18
│ │ │ │
│ │ │ │ │ │ │ │
24 std::vector<LocalKey> keys;
│ │ │ │ @@ -121,15 +121,15 @@ │ │ │ │
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
│ │ │ │
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
│ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a04571.html │ │ │ │ @@ -77,16 +77,16 @@ │ │ │ │ Classes | │ │ │ │ Namespaces │ │ │ │
coefficients.hh File Reference
│ │ │ │ │ │ │ │
│ │ │ │
#include <cstddef>
│ │ │ │ #include <vector>
│ │ │ │ -#include <dune/localfunctions/common/localkey.hh>
│ │ │ │ -#include <dune/localfunctions/whitney/edges0.5/common.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...
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a04571_source.html │ │ │ │ @@ -88,16 +88,16 @@ │ │ │ │
5
│ │ │ │
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
│ │ │ │ - │ │ │ │ - │ │ │ │ + │ │ │ │ + │ │ │ │
14
│ │ │ │
15namespace Dune {
│ │ │ │
16
│ │ │ │
18 //
│ │ │ │
19 // Coefficients
│ │ │ │
20 //
│ │ │ │
21
│ │ │ │ @@ -122,16 +122,16 @@ │ │ │ │
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
│ │ │ │ - │ │ │ │ - │ │ │ │ + │ │ │ │ + │ │ │ │
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
│ │ │ │ ├── html2text {} │ │ │ │ │ @@ -46,16 +46,16 @@ │ │ │ │ │ 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 │ │ │ │ │ +_c_o_m_m_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_:_:_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. │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a04574.html │ │ │ │ @@ -79,15 +79,15 @@ │ │ │ │
interpolation.hh File Reference
│ │ │ │ │ │ │ │
│ │ │ │
#include <type_traits>
│ │ │ │ #include <utility>
│ │ │ │ #include <vector>
│ │ │ │ #include <dune/common/typeutilities.hh>
│ │ │ │ -#include <dune/localfunctions/lagrange/lagrangecoefficients.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...
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a04574_source.html │ │ │ │ @@ -90,15 +90,15 @@ │ │ │ │
7
│ │ │ │
8#include <type_traits>
│ │ │ │
9#include <utility>
│ │ │ │
10#include <vector>
│ │ │ │
11
│ │ │ │
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;
│ │ │ │ @@ -211,15 +211,15 @@ │ │ │ │ │ │ │ │
116 };
│ │ │ │ │ │ │ │
117
│ │ │ │
118}
│ │ │ │
119
│ │ │ │
120#endif // #ifndef DUNE_LAGRANGEBASIS_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
│ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a04580.html │ │ │ │ @@ -77,15 +77,15 @@ │ │ │ │ Classes | │ │ │ │ Namespaces │ │ │ │
interpolation.hh File Reference
│ │ │ │ │ │ │ │
│ │ │ │
#include <cstddef>
│ │ │ │ #include <vector>
│ │ │ │ -#include <dune/localfunctions/whitney/edges0.5/common.hh>
│ │ │ │ +#include <dune/localfunctions/whitney/edges0.5/common.hh>
│ │ │ │
│ │ │ │

Go to the source code of this file.

│ │ │ │

│ │ │ │ Classes

class  Dune::LocalLagrangeInterpolation< LP, dim, F >
 
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a04580_source.html │ │ │ │ @@ -88,15 +88,15 @@ │ │ │ │
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>
│ │ │ │
11
│ │ │ │ - │ │ │ │ + │ │ │ │
13
│ │ │ │
14namespace Dune {
│ │ │ │
15
│ │ │ │
17 //
│ │ │ │
18 // Interpolation
│ │ │ │
19 //
│ │ │ │
20
│ │ │ │ @@ -158,15 +158,15 @@ │ │ │ │ │ │ │ │
86 };
│ │ │ │ │ │ │ │
87
│ │ │ │
88} // namespace Dune
│ │ │ │
89
│ │ │ │
90#endif // DUNE_LOCALFUNCTIONS_WHITNEY_EDGES0_5_INTERPOLATION_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
│ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a04583.html │ │ │ │ @@ -76,18 +76,18 @@ │ │ │ │
│ │ │ │ Classes | │ │ │ │ Namespaces
│ │ │ │
rannacherturek.hh File Reference
│ │ │ │ │ │ │ │
│ │ │ │
#include <dune/geometry/type.hh>
│ │ │ │ -#include <dune/localfunctions/common/localfiniteelementtraits.hh>
│ │ │ │ -#include "rannachertureklocalbasis.hh"
│ │ │ │ -#include "rannachertureklocalcoefficients.hh"
│ │ │ │ -#include "rannachertureklocalinterpolation.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...
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a04583_source.html │ │ │ │ @@ -86,19 +86,19 @@ │ │ │ │
3// SPDX-FileCopyrightInfo: Copyright © DUNE 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
│ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │
15
│ │ │ │
16namespace Dune
│ │ │ │
17{
│ │ │ │
18
│ │ │ │
28 template< class D, class R, unsigned int d >
│ │ │ │
│ │ │ │ │ │ │ │ @@ -149,18 +149,18 @@ │ │ │ │
70 typename Traits::LocalInterpolationType localInterpolation_;
│ │ │ │
71 };
│ │ │ │
│ │ │ │
72
│ │ │ │
73} // namespace Dune
│ │ │ │
74
│ │ │ │
75#endif // #ifndef DUNE_RANNACHER_TUREK_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
│ │ │ │
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
│ │ │ │ ├── html2text {} │ │ │ │ │ @@ -64,18 +64,18 @@ │ │ │ │ │ 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_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_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_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 │ │ │ │ │ +_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 │ │ │ │ │ _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/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.

│ │ │ │

│ │ │ │ Classes

struct  Dune::RannacherTurekLocalFiniteElement< D, R, d >
 Rannacher-Turek shape functions. More...
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./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 │ │ │ │ │ -_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 │ │ │ │ │ _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_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 │ │ │ │ │ _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 │ │ │ │ │ -_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 │ │ │ │ │ +_v_i_r_t_u_a_l_i_n_t_e_r_f_a_c_e_._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,19 +87,19 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ - │ │ │ │ + │ │ │ │ │ │ │ │ - │ │ │ │ + │ │ │ │ │ │ │ │ - │ │ │ │ + │ │ │ │ │ │ │ │

│ │ │ │ Files

 raviartthomas12dlocalbasis.hh
 raviartthomas12dlocalbasis.hh
 
 raviartthomas12dlocalcoefficients.hh
 raviartthomas12dlocalcoefficients.hh
 
 raviartthomas12dlocalinterpolation.hh
 raviartthomas12dlocalinterpolation.hh
 
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/dir_074cf607d40aa196487128d1cd4b7c2b.html │ │ │ │ @@ -93,19 +93,19 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ - │ │ │ │ + │ │ │ │ │ │ │ │ - │ │ │ │ + │ │ │ │ │ │ │ │ - │ │ │ │ + │ │ │ │ │ │ │ │

│ │ │ │ Files

 raviartthomassimplexbasis.hh
 raviartthomassimplexbasis.hh
 
 raviartthomassimplexinterpolation.hh
 raviartthomassimplexinterpolation.hh
 
 raviartthomassimplexprebasis.hh
 raviartthomassimplexprebasis.hh
 
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/dir_143be598d26ab497b1cf2bfe80fc7779.html │ │ │ │ @@ -87,16 +87,16 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ - │ │ │ │ - │ │ │ │ + │ │ │ │ + │ │ │ │ │ │ │ │

│ │ │ │ Files

 hierarchicalsimplexp2withelementbubble.hh
 Hierarchical p2 shape functions for the simplex.
 hierarchicalsimplexp2withelementbubble.hh
 Hierarchical p2 shape functions for the simplex.
 
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/dir_15eac88247e25f0f27b13d32b73d619c.html │ │ │ │ @@ -87,16 +87,16 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ - │ │ │ │ - │ │ │ │ + │ │ │ │ + │ │ │ │ │ │ │ │

│ │ │ │ Files

 refinedsimplexlocalbasis.hh
 Contains a base class for LocalBasis classes based on uniform refinement.
 refinedsimplexlocalbasis.hh
 Contains a base class for LocalBasis classes based on uniform refinement.
 
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/dir_1827d78335859fc5128ae8554d7cfd8a.html │ │ │ │ @@ -101,17 +101,17 @@ │ │ │ │

│ │ │ │ Directories

│ │ │ │  nedelecsimplex │ │ │ │   │ │ │ │ │ │ │ │ │ │ │ │ - │ │ │ │ + │ │ │ │ │ │ │ │ - │ │ │ │ + │ │ │ │ │ │ │ │

│ │ │ │ Files

 nedelec1stkindcube.hh
 nedelec1stkindcube.hh
 
 nedelec1stkindsimplex.hh
 nedelec1stkindsimplex.hh
 
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/dir_1f1a538a498ce02a82be88987c51ab5d.html │ │ │ │ @@ -87,15 +87,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ - │ │ │ │ + │ │ │ │ │ │ │ │

│ │ │ │ Files

 rannacherturek2dlocalbasis.hh
 rannacherturek2dlocalbasis.hh
 
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/dir_21dddee0a34e22148b82b7f55eaf3cdb.html │ │ │ │ @@ -87,19 +87,19 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ - │ │ │ │ + │ │ │ │ │ │ │ │ - │ │ │ │ + │ │ │ │ │ │ │ │ - │ │ │ │ + │ │ │ │ │ │ │ │

│ │ │ │ Files

 raviartthomas2cube2dlocalbasis.hh
 raviartthomas2cube2dlocalbasis.hh
 
 raviartthomas2cube2dlocalcoefficients.hh
 raviartthomas2cube2dlocalcoefficients.hh
 
 raviartthomas2cube2dlocalinterpolation.hh
 raviartthomas2cube2dlocalinterpolation.hh
 
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/dir_22a3622bb91f1bf42dc2704315301344.html │ │ │ │ @@ -87,19 +87,19 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ - │ │ │ │ + │ │ │ │ │ │ │ │ - │ │ │ │ + │ │ │ │ │ │ │ │ - │ │ │ │ + │ │ │ │ │ │ │ │

│ │ │ │ Files

 brezzidouglasmarini1cube3dlocalbasis.hh
 brezzidouglasmarini1cube3dlocalbasis.hh
 
 brezzidouglasmarini1cube3dlocalcoefficients.hh
 brezzidouglasmarini1cube3dlocalcoefficients.hh
 
 brezzidouglasmarini1cube3dlocalinterpolation.hh
 brezzidouglasmarini1cube3dlocalinterpolation.hh
 
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/dir_28824a0ee22611676c14160ba27dca19.html │ │ │ │ @@ -95,15 +95,15 @@ │ │ │ │

│ │ │ │ Directories

│ │ │ │  power │ │ │ │   │ │ │ │ │ │ │ │ │ │ │ │ - │ │ │ │ + │ │ │ │ │ │ │ │

│ │ │ │ Files

 power.hh
 power.hh
 
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/dir_30041f0f075e04eba93c1e90a93bda5c.html │ │ │ │ @@ -218,43 +218,43 @@ │ │ │ │  utility │ │ │ │   │ │ │ │  whitney │ │ │ │   │ │ │ │ │ │ │ │ │ │ │ │ - │ │ │ │ + │ │ │ │ │ │ │ │ - │ │ │ │ + │ │ │ │ │ │ │ │ - │ │ │ │ + │ │ │ │ │ │ │ │ - │ │ │ │ + │ │ │ │ │ │ │ │ - │ │ │ │ - │ │ │ │ + │ │ │ │ + │ │ │ │ │ │ │ │ - │ │ │ │ - │ │ │ │ + │ │ │ │ + │ │ │ │ │ │ │ │ - │ │ │ │ + │ │ │ │ │ │ │ │ - │ │ │ │ + │ │ │ │ │ │ │ │ - │ │ │ │ + │ │ │ │ │ │ │ │ - │ │ │ │ + │ │ │ │ │ │ │ │ - │ │ │ │ - │ │ │ │ + │ │ │ │ + │ │ │ │ │ │ │ │ - │ │ │ │ + │ │ │ │ │ │ │ │ - │ │ │ │ - │ │ │ │ + │ │ │ │ + │ │ │ │ │ │ │ │

│ │ │ │ Files

 brezzidouglasmarini.hh
 brezzidouglasmarini.hh
 
 crouzeixraviart.hh
 crouzeixraviart.hh
 
 dualmortarbasis.hh
 dualmortarbasis.hh
 
 enriched.hh
 enriched.hh
 
 hierarchical.hh
 Convenience header that includes all available hierarchical LocalFiniteElements.
 hierarchical.hh
 Convenience header that includes all available hierarchical LocalFiniteElements.
 
 lagrange.hh
 Convenience header that includes all implementations of Lagrange finite elements.
 lagrange.hh
 Convenience header that includes all implementations of Lagrange finite elements.
 
 mimetic.hh
 mimetic.hh
 
 monomial.hh
 monomial.hh
 
 nedelec.hh
 nedelec.hh
 
 orthonormal.hh
 orthonormal.hh
 
 rannacherturek.hh
 Convenience header that includes all available Rannacher-Turek LocalFiniteElements.
 rannacherturek.hh
 Convenience header that includes all available Rannacher-Turek LocalFiniteElements.
 
 raviartthomas.hh
 raviartthomas.hh
 
 refined.hh
 Convenience header that includes all available LocalFiniteElements based on uniform element refinement.
 refined.hh
 Convenience header that includes all available LocalFiniteElements based on uniform element refinement.
 
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/dir_382f55a8cedaec4f6094a1f9a7ac5b41.html │ │ │ │ @@ -87,19 +87,19 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ - │ │ │ │ + │ │ │ │ │ │ │ │ - │ │ │ │ + │ │ │ │ │ │ │ │ - │ │ │ │ + │ │ │ │ │ │ │ │

│ │ │ │ Files

 raviartthomas4cube2dlocalbasis.hh
 raviartthomas4cube2dlocalbasis.hh
 
 raviartthomas4cube2dlocalcoefficients.hh
 raviartthomas4cube2dlocalcoefficients.hh
 
 raviartthomas4cube2dlocalinterpolation.hh
 raviartthomas4cube2dlocalinterpolation.hh
 
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/dir_386a5b330ea6d6e23e2617c849e344e3.html │ │ │ │ @@ -87,19 +87,19 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ - │ │ │ │ + │ │ │ │ │ │ │ │ - │ │ │ │ + │ │ │ │ │ │ │ │ - │ │ │ │ + │ │ │ │ │ │ │ │

│ │ │ │ Files

 raviartthomas0prismlocalbasis.hh
 raviartthomas0prismlocalbasis.hh
 
 raviartthomas0prismlocalcoefficients.hh
 raviartthomas0prismlocalcoefficients.hh
 
 raviartthomas0prismlocalinterpolation.hh
 raviartthomas0prismlocalinterpolation.hh
 
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/dir_4009bb7c6c39619515ed15f75465c5da.html │ │ │ │ @@ -87,19 +87,19 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ - │ │ │ │ + │ │ │ │ │ │ │ │ - │ │ │ │ + │ │ │ │ │ │ │ │ - │ │ │ │ + │ │ │ │ │ │ │ │

│ │ │ │ Files

 raviartthomas02dlocalbasis.hh
 raviartthomas02dlocalbasis.hh
 
 raviartthomas02dlocalcoefficients.hh
 raviartthomas02dlocalcoefficients.hh
 
 raviartthomas02dlocalinterpolation.hh
 raviartthomas02dlocalinterpolation.hh
 
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/dir_421d79ad4cafaafb52a5003304930aac.html │ │ │ │ @@ -94,15 +94,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ - │ │ │ │ + │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ Files

 basis.hh
 
 coefficients.hh
 
 common.hh
 common.hh
 
 interpolation.hh
 
│ │ │ │ │ │ │ │ │ │ │ │